0

В манифесте разрешения есть. Картинка с помощью Picasso загружается, но при сохранении всегда пустой файл:

             ImageView ViewPicture  = findViewById(R.id.imageView1);
            ViewPicture.setDrawingCacheEnabled(true);
            ViewPicture.buildDrawingCache(true);
            Picasso.get()
                    .load("https://apod.nasa.gov/apod/image/vir70_skyview.gif")
                    .into((ImageView) ViewPicture,            new com.squareup.picasso.Callback() {
                @Override
                public void onSuccess() {
                    //do smth when picture is loaded successfully
                    bitmap=ViewPicture.getDrawingCache();
                    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "savedBitmapSAVE.png");
                    try {
                        FileOutputStream fos = null;
                        try {
                            fos = new FileOutputStream(file);
                            bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
                            fos.flush();
                            fos.close();
                        }
                        finally {
                            if (fos != null) fos.close();
                        }
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    };
                }
                @Override
                public void onError(Exception e) {
                    //do smth when there is picture loading error
                             }
            }

);

Ошибка:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference

  • я так понимаю void onSuccess() должна отрабатывать при окончании загрузки картинки, но при сохранении файл все равно пустой сохраняется. Если вывести процедуру сохранения в отдельную кнопку, файл нормальный создается – user551602 Apr 20 '23 at 08:34
  • Метод getExternalStoragePublicDirectory устарел, на последних версиях Android это не работает, используйте Scoped Storage. Из вопроса не совсем ясно, выполняется ли метод до конца или же пишется ошибка в лог? Приведите логи. И последнее: оставлять пустым onError -- это стрелять себе в ногу. – Vadik Sirekanyan Apr 24 '23 at 04:06
  • добрый день. этот код у меня запускается по нажатию кнопки. первый раз выходит ошибка и создается 0 файл, второй раз создается полноценный файл. Ошибка: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference – user551602 Apr 24 '23 at 06:54
  • 1
    Метод getDrawingCache устарел. Кроме этого, в некоторых случаях этот метод возвращает null. У вас нет проверки bitmap на null, поэтому при обращении к bitmap у вас возникает NullPointerException. – Vadik Sirekanyan Apr 24 '23 at 14:31

0 Answers0