Android의 모바일 카메라 앱에서 사진을 찍은 후 onActivityResult의 Null 포인터 예외

njnjnj

이것은 Unity와 Native Android를 연결하는 데 사용하는 UnityBridge의 코드입니다.

Unity와 Android 사이의 다리는 성공적입니다. Unity에서 openCamera 메서드를 호출하면 카메라 앱이 열리고 사진을 찍을 수 있습니다. 촬영 후 이미지는 내부 메모리의 Demo 폴더에 저장됩니다. 이 단계까지는 문제가 없지만 사진을 저장 한 후 앱 강제가 종료됩니다. 다음과 같이 cmd에서 로그를 얻었습니다. onActivityResult에서 얻은 Intent 데이터가 null이라고 생각합니다. 누군가이 오류를 해결하도록 도와주세요. 이미지를 저장소 카드의 데모 폴더에 저장하고 촬영 한 사진의 파일 이름을 포함한 전체 파일 경로를 문자열 변수로 가져와 다음 프로세스를 위해 전체 파일 경로를 다시 단일화 할 수 있도록해야합니다. 가능합니까?

Logcat

E / AndroidRuntime (1873) : 원인 : java.lang.RuntimeException : 결과 ResultInfo {who = null, request = 100, result = -1, data = null}을 활동 {com.tony.example / com.tony에 전달하지 못했습니다. .example.UnityBridge} : java.lang.NullPointerException E / AndroidRuntime (1873) : at android.app.ActivityThread.deliverResults (ActivityThread.java:3205) E / AndroidRuntime (1873) : at android.app.ActivityThread.handleSendResult (ActivityThread) .java : 3248) E / AndroidRuntime (1873) : android.app.ActivityThread.access $ 1200 (ActivityThread.java:140) E / AndroidRuntime (1873) : android.app.ActivityThread $ H.handleMessage (ActivityThread.java : 1285) E / AndroidRuntime (1873) : android.os.Handler.dispatchMessage (Handler.java:99) E / AndroidRuntime (1873) : android.os.Looper.loop (Looper.java:137) E / AndroidRuntime ( 1873) : android.app.ActivityThread.main (ActivityThread.java :4921) E / AndroidRuntime (1873) : java.lang.reflect.Method.invokeNative (NativeMethod) E / AndroidRuntime (1873) : java.lang.reflect.Method.invoke (Method.java:511) E / AndroidRuntime ( 1873) : at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1027) E / AndroidRuntime (1873) : at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) E / AndroidRuntime (1873) : at dalvik.system.NativeStart.main (Native Method) E / AndroidRuntime (1873) : 원인 : java.lang.NullPointerException E / AndroidRuntime (1873) : at com.tony.example.UnityBridge. onActivityResult (UnityBridge.java:154) E / AndroidRuntime (1873) : android.app.Activity.dispatchActivityResult (Activity.java:5390) E / AndroidRuntime (1873) : android.app.ActivityThread.deliverResults (ActivityThread.java : 3201) E / AndroidRuntime (1873) : ... 11 morereflect.Method.invokeNative (NativeMethod) E / AndroidRuntime (1873) : at java.lang.reflect.Method.invoke (Method.java:511) E / AndroidRuntime (1873) : at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1027) E / AndroidRuntime (1873) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) E / AndroidRuntime (1873) : dalvik.system.NativeStart에서. main (Native Method) E / AndroidRuntime (1873) : 원인 : java.lang.NullPointerException E / AndroidRuntime (1873) : at com.tony.example.UnityBridge.onActivityResult (UnityBridge.java:154) E / AndroidRuntime (1873) : at android.app.Activity.dispatchActivityResult (Activity.java:5390) E / AndroidRuntime (1873) : at android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime (1873) : ... 11 morereflect.Method.invokeNative (NativeMethod) E / AndroidRuntime (1873) : at java.lang.reflect.Method.invoke (Method.java:511) E / AndroidRuntime (1873) : at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1027) E / AndroidRuntime (1873) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) E / AndroidRuntime (1873) : dalvik.system.NativeStart에서. main (Native Method) E / AndroidRuntime (1873) : 원인 : java.lang.NullPointerException E / AndroidRuntime (1873) : at com.tony.example.UnityBridge.onActivityResult (UnityBridge.java:154) E / AndroidRuntime (1873) : at android.app.Activity.dispatchActivityResult (Activity.java:5390) E / AndroidRuntime (1873) : at android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime (1873) : ... 11 morereflect.Method.invoke (Method.java:511) E / AndroidRuntime (1873) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1027) E / AndroidRuntime (1873) : com. android.internal.os.ZygoteInit.main (ZygoteInit.java:794) E / AndroidRuntime (1873) : at dalvik.system.NativeStart.main (Native Method) E / AndroidRuntime (1873) : 원인 : java.lang.NullPointerException E / AndroidRuntime (1873) : com.tony.example.UnityBridge.onActivityResult (UnityBridge.java:154)에서 E / AndroidRuntime (1873) : android.app.Activity.dispatchActivityResult (Activity.java:5390)에서 E / AndroidRuntime ( 1873) : at android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime (1873) : ... 11 morereflect.Method.invoke (Method.java:511) E / AndroidRuntime (1873) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1027) E / AndroidRuntime (1873) : com. android.internal.os.ZygoteInit.main (ZygoteInit.java:794) E / AndroidRuntime (1873) : at dalvik.system.NativeStart.main (Native Method) E / AndroidRuntime (1873) : 원인 : java.lang.NullPointerException E / AndroidRuntime (1873) : com.tony.example.UnityBridge.onActivityResult (UnityBridge.java:154)에서 E / AndroidRuntime (1873) : android.app.Activity.dispatchActivityResult (Activity.java:5390)에서 E / AndroidRuntime ( 1873) : at android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime (1873) : ... 11 more1027) E / AndroidRuntime (1873) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) E / AndroidRuntime (1873) : dalvik.system.NativeStart.main (Native Method) E / AndroidRuntime (1873) : 원인 : java.lang.NullPointerException E / AndroidRuntime (1873) : at com.tony.example.UnityBridge.onActivityResult (UnityBridge.java:154) E / AndroidRuntime (1873) : at android.app.Activity. dispatchActivityResult (Activity.java:5390) E / AndroidRuntime (1873) : at android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime (1873) : ... 11 more1027) E / AndroidRuntime (1873) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) E / AndroidRuntime (1873) : dalvik.system.NativeStart.main (Native Method) E / AndroidRuntime (1873) : 원인 : java.lang.NullPointerException E / AndroidRuntime (1873) : at com.tony.example.UnityBridge.onActivityResult (UnityBridge.java:154) E / AndroidRuntime (1873) : at android.app.Activity. dispatchActivityResult (Activity.java:5390) E / AndroidRuntime (1873) : at android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime (1873) : ... 11 more154) E / AndroidRuntime (1873) : android.app.Activity.dispatchActivityResult (Activity.java:5390) E / AndroidRuntime (1873) : android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime ( 1873) : ... 11 더154) E / AndroidRuntime (1873) : android.app.Activity.dispatchActivityResult (Activity.java:5390) E / AndroidRuntime (1873) : android.app.ActivityThread.deliverResults (ActivityThread.java:3201) E / AndroidRuntime ( 1873) : ... 11 더

암호

package com.tony.example;

import java.io.ByteArrayOutputStream;
import java.io.File;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;

import com.unity3d.player.UnityPlayerActivity;
import com.unity3d.player.UnityPlayer;

public class UnityBridge extends UnityPlayerActivity
{    
static private int _myInt;
private static int RESULT_LOAD_IMAGE = 1;
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
public static final int MEDIA_TYPE_IMAGE = 1;
private Uri fileUri;
private Context context;
private static UnityBridge instance;
public Bitmap imgbitmap;
public String picturepath;

public UnityBridge() {
    this.instance = this;
}

public static UnityBridge instance() {
    if(instance == null) {
        instance = new UnityBridge();
    }
    return instance;
}

public void setContext(Context context) {
    this.context = context;
}

public void openCamera()
{
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
/** Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri(int type){
      return Uri.fromFile(getOutputMediaFile(type));
}

/** Create a File for saving an image or video */
private static File getOutputMediaFile(int type){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.

    File mediaStorageDir = new File(android.os.Environment.getExternalStorageDirectory(), "Demo");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("Demo", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp + ".jpg");
    } else {
        return null;
    }

    return mediaFile;
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.d("Request Code: "+requestCode,"Result Code: "+resultCode);

    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Image captured and saved to fileUri specified in the Intent
            Toast.makeText(this.context, "Image saved to:\n" +
                     data.getData(), Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this.context, "Image Capture cancelled by the user", Toast.LENGTH_LONG).show();
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
            Toast.makeText(this.context,"Something unexpected happened, Please check your Camera",Toast.LENGTH_LONG).show();
        }
    }

}

public void showMessage(String message) {
    Toast.makeText(this.context, message, Toast.LENGTH_SHORT).show();
}
}
으로

NPE는 다음과 같습니다. Toast.makeText(this.context, "Image saved to:\n" + data.getData(), Toast.LENGTH_LONG).show();

활동 (카메라)을 시작하면 파일이 사진과 함께 저장되고 Intent data매개 변수는 null이되기 때문입니다.

datano EXTRA_OUTPUT가 설정된 경우 Intent 매개 변수에 반환됩니다 . 경로가 아니라 사진 자체가 포함됩니다.

NPE를 방지하려면이 알림을 사용하십시오 (데이터 매개 변수 없음). Toast.makeText(this.context, "Image saved", Toast.LENGTH_LONG).show();

편집하다:

이것을 사용하여 저장 디렉토리를 가져 오면 갤러리에서 검색 할 수있는 이미지 폴더에 저장됩니다.

File storageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);

저장 경로를 표시하려면 전역 String변수를 사용하여 파일을 만들 때 파일 경로를 저장 한 다음 알림에 표시합니다.

opencamera()방법 :

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
globalStringFilePath = fileUri .getAbsolutePath();

그러면 당신의 토스트는

Toast.makeText(this.context, "Image saved to:\n" + globalStringFilePath , Toast.LENGTH_LONG).show()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

타사 카메라 응용 프로그램을 선택할 때 카메라 의도의 Null 포인터 예외

분류에서Dev

null 개체의 메서드 호출 후 null 포인터 예외 없음

분류에서Dev

null 개체의 메서드 호출 후 null 포인터 예외 없음

분류에서Dev

인터페이스 메서드를 모의하는 Null 포인터 예외

분류에서Dev

조각 OnActivityCreated 메서드의 Android Null 포인터 예외

분류에서Dev

Android에서 동일한 활동에서 두 개의 Volley 요청을 사용할 때 null 포인터 예외를 수정하는 방법은 무엇입니까?

분류에서Dev

TextView의 setText () 메서드에서 Null 포인터 예외

분류에서Dev

Android-카메라에서 찍은 사진 저장, 메모리 부족

분류에서Dev

Android의 조각에서 사진을 찍는 동안 Nullpointer 예외

분류에서Dev

Android에서 사진을 찍은 후 onActivityResult가 호출되지 않음

분류에서Dev

카메라로 사진을 찍고 데이터베이스에 저장하고 Android의 listView에 표시하는 방법은 무엇입니까?

분류에서Dev

Android 카메라로 찍은 이상한 크기의 사진

분류에서Dev

Android Facebook LoginButton onActivityResult null 포인터 예외

분류에서Dev

Nexus 5에서 Android 카메라를 사용하여 이미지를 캡처 한 후 Null 포인터

분류에서Dev

Android 애플리케이션을 읽는 파일의 Java Null 포인터 예외

분류에서Dev

setOnClickListener의 Android에서 Null 포인터 예외 발생

분류에서Dev

Android의 asynktask에서 NUll 포인터 예외

분류에서Dev

통화 변환기 Android 앱의 Null 포인터 예외

분류에서Dev

통화 변환기 Android 앱의 Null 포인터 예외

분류에서Dev

Android 및 앱 충돌의 Null 포인터 예외

분류에서Dev

Jenkins 스크립트 파이프 라인 메서드의 배열에서 null 포인터 예외 확인

분류에서Dev

StringTokenizer의 Null 포인터 예외-Android

분류에서Dev

Android sqlite의 Null 포인터 예외

분류에서Dev

OutputStream에 writeObject 후 null 포인터 예외

분류에서Dev

OutputStream에 writeObject 후 null 포인터 예외

분류에서Dev

Android의 Bitmap.createBitmap에 대한 Null 포인터 예외

분류에서Dev

카메라로 찍은 사진의 URI 가져 오기

분류에서Dev

Pixel_Api_26 에뮬레이터에서만 카메라에서 사진을 찍은 후 ImageView에 이미지를 배치 할 수 없음

분류에서Dev

Mockito의 문 체인에 따라 Null 포인터 예외가 있습니까?

Related 관련 기사

  1. 1

    타사 카메라 응용 프로그램을 선택할 때 카메라 의도의 Null 포인터 예외

  2. 2

    null 개체의 메서드 호출 후 null 포인터 예외 없음

  3. 3

    null 개체의 메서드 호출 후 null 포인터 예외 없음

  4. 4

    인터페이스 메서드를 모의하는 Null 포인터 예외

  5. 5

    조각 OnActivityCreated 메서드의 Android Null 포인터 예외

  6. 6

    Android에서 동일한 활동에서 두 개의 Volley 요청을 사용할 때 null 포인터 예외를 수정하는 방법은 무엇입니까?

  7. 7

    TextView의 setText () 메서드에서 Null 포인터 예외

  8. 8

    Android-카메라에서 찍은 사진 저장, 메모리 부족

  9. 9

    Android의 조각에서 사진을 찍는 동안 Nullpointer 예외

  10. 10

    Android에서 사진을 찍은 후 onActivityResult가 호출되지 않음

  11. 11

    카메라로 사진을 찍고 데이터베이스에 저장하고 Android의 listView에 표시하는 방법은 무엇입니까?

  12. 12

    Android 카메라로 찍은 이상한 크기의 사진

  13. 13

    Android Facebook LoginButton onActivityResult null 포인터 예외

  14. 14

    Nexus 5에서 Android 카메라를 사용하여 이미지를 캡처 한 후 Null 포인터

  15. 15

    Android 애플리케이션을 읽는 파일의 Java Null 포인터 예외

  16. 16

    setOnClickListener의 Android에서 Null 포인터 예외 발생

  17. 17

    Android의 asynktask에서 NUll 포인터 예외

  18. 18

    통화 변환기 Android 앱의 Null 포인터 예외

  19. 19

    통화 변환기 Android 앱의 Null 포인터 예외

  20. 20

    Android 및 앱 충돌의 Null 포인터 예외

  21. 21

    Jenkins 스크립트 파이프 라인 메서드의 배열에서 null 포인터 예외 확인

  22. 22

    StringTokenizer의 Null 포인터 예외-Android

  23. 23

    Android sqlite의 Null 포인터 예외

  24. 24

    OutputStream에 writeObject 후 null 포인터 예외

  25. 25

    OutputStream에 writeObject 후 null 포인터 예외

  26. 26

    Android의 Bitmap.createBitmap에 대한 Null 포인터 예외

  27. 27

    카메라로 찍은 사진의 URI 가져 오기

  28. 28

    Pixel_Api_26 에뮬레이터에서만 카메라에서 사진을 찍은 후 ImageView에 이미지를 배치 할 수 없음

  29. 29

    Mockito의 문 체인에 따라 Null 포인터 예외가 있습니까?

뜨겁다태그

보관