【发布时间】:2015-11-29 20:50:18
【问题描述】:
我使用 AsyncTask 作为内部类来保存位图。但是 FileOutputStream 操作不起作用。如果我在 UI 线程中的方法中运行相同的代码,则代码运行并且我能够成功保存位图。
我知道 doInBackground() 方法确实会执行,并且 onPostExecute() 方法也会被执行。
另外,如果我获取传递给 AsyncTask 的输入流,并尝试对其进行解码以设置 imageView,则它不起作用。但是,如果我在 AsyncTask 之外使用相同的代码,它就可以工作。
我按如下方式实现了 AsyncTask,第二条和第三条日志语句没有被记录,所以我知道有些东西运行不正常:
public class SaveImageToInternalStorage extends AsyncTask {
InputStream bitmap;
String PICTURE_KEY;
public SaveImageToInternalStorage1(final InputStream bitmap, final String PICTURE_KEY) {
this.bitmap = bitmap;
this.PICTURE_KEY = PICTURE_KEY;
}
@Override
protected Object doInBackground(Object[] params) {
FileOutputStream fos;
try {
fos = picture_chooser.this.openFileOutput(PICTURE_KEY, MODE_PRIVATE);
Bitmap bitmap2 = BitmapFactory.decodeStream(bitmap);
Log.v("saveBitmap", " first log statement"); ////This gets logged
bitmap2.compress(Bitmap.CompressFormat.WEBP, 85, fos);
Log.v("saveBitmap", " second log statement"); // This is not logged
fos.close();
Log.v("saveBitmap", " third log statement"); // This is not logged
} catch (Exception e) {
Log.e("saveToInternalStorage()", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Log.v("saveBitmap", " onPostExecute log statement"); // This is logged
imageViewSetter(bitmap);
}
}
//runs in the wrapper class
public void imageViewSetter(InputStream inputStream) {
imageView.setImageBitmap(BitmapFactory.decodeStream(inputStream)); //this does not set the imageView
}
任何帮助将不胜感激。
【问题讨论】:
标签: java android bitmap android-asynctask fileoutputstream