2013-11-27 2 views
1

У меня есть FileOutputstream здесь:Ошибки с FileOutputStream и FileInputStream

public void SaveImage(Bitmap default_b) { 

    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/saved_images"); 
    myDir.mkdirs(); 
    Random generator = new Random(); 
    int n = 100000; 
    n = generator.nextInt(n); 
    String fname = "Image-" + n +".jpg"; 
    File file = new File (myDir, fname); 
    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = openFileOutput("file", Context.MODE_WORLD_WRITEABLE); 
     default_b.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.flush(); 
     out.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Но я получаю ошибку на этой линии:

FileOutputStream out = openFileOutput("file", Context.MODE_WORLD_WRITEABLE); 

Сказать, что openFileOutput не определено * (обратите внимание, что это в базовый класс адаптера, и когда я пытаюсь сделать это из контекста, Context.getApplicationContext().openFileOutput получает сообщение об ошибке «Невозможно сделать статическую ссылку на нестатический метод getApplicationContext() из типа Context»). Я также получаю предупреждение о том, что Context.MODE_WORLD_WRITABLE осуждается.

Тогда у меня FileInputStream здесь (в другом классе, который простирается BaseAdapter):

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // Try to reuse the views 
    ImageView view = (ImageView) convertView; 
    // if convert view is null then create a new instance else reuse it 
    if (view == null) { 
     view = new ImageView(mContextGV); 
     Log.d("GridViewAdapter", "new imageView added"); 
    } 
    try { 
     FileInputStream in = new openFileInput("file"); 
     BufferedInputStream buf = new BufferedInputStream(in); 
     byte[] bitMapA = new byte[buf.available()]; 
     buf.read(bitMapA); 
     Bitmap bM = BitmapFactory.decodeByteArray(bitMapA, 0, bitMapA.length); 
     view.setImageBitmap(bM); 
     if (in != null) { 
      in.close(); 
     } 
     if (buf != null) { 
      buf.close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    view.setImageResource(drawables.get(position)); 
    view.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    view.setLayoutParams(new android.widget.GridView.LayoutParams(70, 70)); 
    view.setTag(String.valueOf(position)); 
    return view; 
} 

То есть ошибку на этой линии:

FileInputStream in = new openFileInput("file"); 

о том, что openFileInput неопределен и еще раз, когда Я меняю его на:

FileInputStream in = new Context.getApplicationContext().openFileInput("file"); 

Я получаю сообщение об ошибке «Context.getAp plicationContext() не может быть разрешен к типу»

+1

Вам необходимо пройти в вашем контексте деятельности на адаптере и использовать это. В качестве побочной заметки вы действительно не должны иметь открытые файлы адаптера просмотра, так как это будет огромный успех. –

+0

Хорошо спасибо! Я смог исправить ошибку с помощью FOS, используя «FileOutputStream out = mContext.getApplicationContext(). OpenFileOutput (« file », Context.MODE_WORLD_WRITEABLE);« но я все еще получаю ошибку в FIS, и я убедился, что у меня есть этот «закрытый контекстный контекст» в верхней части адаптера – user2909006

+0

А также, что вы рекомендуете, чтобы я делал так, чтобы у меня не было открытых файлов с открытым доступом? – user2909006

ответ

0

Попробуйте заменить OutputStream файл кода

String fname = "Image-" + n ; 
File file = new File (myDir, fname); 
if (file.exists()) file.delete(); 
try { 
    File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
     + "/" + fname +".png"); 
FileOutputStream fos = new FileOutputStream(f); 
default_b.compress(Bitmap.CompressFormat.PNG,90,fos); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

его работы идеально подходит для меня, чтобы сохранить изображение

+0

Итак, когда я иду читать файл с FileInputStream, я бы открылFile (f)? – user2909006

Смежные вопросы