3

내 앱에는 갤러리에서 사진을 선택하거나 사진을 찍어야하는 양식이 있습니다.ACTION_IMAGE CAPTURE (타사 앱에서 사진 찍기)에서 예외 배달 결과

두 개의 버튼이 있습니다. 갤러리 픽업을하는 사람은 잘 작동합니다.

사진을 찍을 수있는 문제가 있습니다. 클릭하면 카메라가 성공적으로 열립니다. 그런 다음 사진을 찍을 수 있으며 보관하거나 버리길 원하는지 묻습니다.

저장하도록 선택하면 앱으로 다시 연결하려고 시도하지만 충돌합니다.

logcat가이 오류를 표시합니다.

11-30 23:20:06.288: ERROR/AndroidRuntime(3045): FATAL EXCEPTION: main 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045): java.lang.RuntimeException: Unable to resume activity {com.android.upvar/com.android.upvar.NewPOI}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.android.upvar/com.android.upvar.NewPOI}: java.lang.NullPointerException 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.os.Looper.loop(Looper.java:130) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at java.lang.reflect.Method.invoke(Method.java:507) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at dalvik.system.NativeStart.main(Native Method) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.android.upvar/com.android.upvar.NewPOI}: java.lang.NullPointerException 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2536) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2111) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  ... 12 more 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045): Caused by: java.lang.NullPointerException 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at com.android.upvar.NewPOI.onActivityResult(NewPOI.java:130) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
11-30 23:20:06.288: ERROR/AndroidRuntime(3045):  ... 13 more 

은 활동 시작 버튼 리스너입니다 :

//mTakeImg is the button 
    mTakeImg.setOnClickListener(new View.OnClickListener() {    
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 
     } 
    }); 

을 그리고 이것은 응답 걸리는 활동 결과 방법이다 : 나는 어디에 표시되지 않는

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

     switch(requestCode) { 
      case ACTIVITY_SELECT_IMAGE: 
       if(resultCode == RESULT_OK){ 
        Uri selectedImage = imageReturnedIntent.getData(); 
        mImg.setText(selectedImage.getPath()); 
        InputStream imageStream; 
        try { 
         imageStream = getContentResolver().openInputStream(selectedImage); 
         Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
         mImage.setImageBitmap(yourSelectedImage); 
        } catch (FileNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }     
       } 
       break; 
      case CAMERA_PIC_REQUEST: 
       if (resultCode == RESULT_OK){ 
        Uri selectedImage = imageReturnedIntent.getData(); 
        mImg.setText(selectedImage.getPath()); 
        InputStream imageStream; 
        try { 
         imageStream = getContentResolver().openInputStream(selectedImage); 
         Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
         mImage.setImageBitmap(yourSelectedImage); 
        } catch (FileNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }     
       } 
       break; 
     } 
    } 

을 오류가 발생했습니다. 튜토리얼을 따라이 작업을 수행했으며 코드와 동일하게 보입니다. 그래서 어떤 도움을 주시면 감사하겠습니다.

감사합니다.

+0

활동 중 # 130 행은 어느 것입니까? (com.android.upvar.NewPOI.onActivityResult (NewPOI.java:130) 참조) – gianpi

+0

mImg.setText (selectedImage.getPath()); 스위치의 두 번째 대소 문자입니다. 나는 그것을 주석 처리했지만, 변경하지는 않는다. – ferguior

답변

1

다른 곳에서 mImg를 초기화한다고 가정하면 (setText를 호출하려고하므로) selectedImage가 null인지 확인해보십시오. getData()가 null을 반환한다는 사실은 일부 장치에서 알려진 버그 였고 수정 된 것인지 확실하지 않습니다.

+0

맞아, getData()는 null을 반환한다! 하지만 변수는 내게 의존하지 않습니다 : S 어떻게 작동시킬 수 있습니까? 버그를 수정하는 알려진 해결 방법이 있습니까? 아니면 어떤 패치? – ferguior

+0

불행히도 쉬운/깨끗한 해결 방법을 모르겠습니다. 내가 지금까지 건너 온 최고의 하나는 [이 하나] (http://stackoverflow.com/questions/3275749/im-getting-a-nullpointerexception-when-i-use-action-image-capture-to- take-a-pic). – gianpi

+0

좋아요! 그 질문에 [이 다른 질문] (http://stackoverflow.com/questions/1910608/android-action-image-capture-intent)에 대한 링크가있었습니다.이 코드는 정말 도움이되었습니다. – ferguior