Хранение файла на внешнем хранилище занимает слишком много времени - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь сделать снимок из своего приложения с помощью локальной камеры. Сохранение изображения в указанной папке занимает слишком много времени. Из-за этой временной задержки я получаю исключение NullPointerException в своем коде с использованием библиотеки растровых изображений.

Я уже проверил другие ответы, связанные с этой проблемой, я предоставил разрешения в AndroidManifest.xml, я также предоставил легкую реализацию-разрешение 'pub.devrel: easypermissions: 0.2.1'. Я могу сохранить изображение снаружи, но изображение отображается в папке через 5-10 минут. И тогда код не может прочитать изображение, так как он не может найти его на устройстве. Он появляется позже, после сбоя приложения.

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {

        Bitmap photo = BitmapFactory.decodeFile(f.getAbsolutePath());
        imageView.setImageBitmap(photo);

        Intent i = new Intent(Intent.ACTION_SEND);
        Uri uri = Uri.fromFile(f);
        i.putExtra(Intent.EXTRA_STREAM, uri);
        try {
            startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(HomeScreen.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
        }
        i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        i.setType("message/rfc822");
        i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"abc@gmail.com"});
        i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
        i.putExtra(Intent.EXTRA_TEXT   , "body of email");


    }
  }

Ошибка отображается в этой строке imageView.setImageBitmap(photo);

D/AndroidRuntime: Shutting down VM
 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=Intent { dat=file:///storage/emulated/0/Pictures/pic/image-9747.jpg flg=0x1 }} to activity {com.example.pic/com.example.pic.HomeScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference
     at android.app.ActivityThread.deliverResults(ActivityThread.java:3779)
     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3822)
     at android.app.ActivityThread.access$1400(ActivityThread.java:155)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1429)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:152)
     at android.app.ActivityThread.main(ActivityThread.java:5497)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference```

1 Ответ

0 голосов
/ 03 июня 2019

Вы добавили это в свою onCreate()

imageView = (ImageView)findViewById(R.id.imageView2);

Образец ImageView декларации Manifest.xml

 <ImageView
  android:id="@+id/uncheck_disp_act"
  android:layout_width="25dp"
  android:layout_height="25dp"
  app:srcCompat="@drawable/uncheck" />
...