У меня есть приложение, которому необходимо загрузить некоторые сгенерированные изображения (PNG).сохранение загруженного файла во внутреннюю память java/android не удается
Я пробовал стандартный подход ImageDownloader extends AsyncTask
, doInBackground()
извлекает изображение, а onPostExecute()
попытается сохранить его на внутреннем изображении.
(Часть) код ниже:
public class HandleImages extends AppCompatActivity {
String filename = "";
public boolean saveImageToInternalStorage(Bitmap image) {
try {
FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
image.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public Bitmap retrieveImage(String url){
ImageDownloader task = new ImageDownloader();
Bitmap image = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
try {
image = task.execute(url).get();
} catch (InterruptedException e) {
MainActivity.debb("InterruptedException - " + e.getMessage() + " in " + new Object(){}.getClass().getEnclosingMethod().getName());
e.printStackTrace();
} catch (ExecutionException e) {
MainActivity.debb("ExecutionException - " + e.getMessage() + " in " + new Object(){}.getClass().getEnclosingMethod().getName());
e.printStackTrace();
}
return image;
}
public class ImageDownloader extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... urls) {
try {
String[] filenames = urls[0].split("/");
filename = filenames[filenames.length-1] + ".jpg";
URL url = new URL(urls[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream inputStream = connection.getInputStream();
return BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
if (bitmap != null)
saveImageToInternalStorage(bitmap);
}
}
}
и ошибка, что я получаю: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference
.
Кажется, что FileOutputStream fos = openFileOutput(..)
терпит неудачу, но понятия не имею, почему.
Также попытался добавить путь к файлу (sdCard.getPath() + "/" +
). Как и ожидалось, это не имело никакого значения.
Изображения в порядке, я могу видеть их в браузере. Также попробовали с загруженными изображениями - вместо сгенерированных, тот же результат.
Это довольно странно, есть ли у кого-нибудь идеи?
Спасибо!