마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

널포인트에러 문제입니다.

0 추천

앱 사용자로부터 보고서가 왔습니다.

 

Caused by를 보니 널포인트익셉션이 났습니다.

java.lang.RuntimeException: Unable to resume activity {com.app.sports/com.app.sports.CustomFullActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {com.app.sports/com.app.sports.CustomFullActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2642)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2670)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2140)
at android.app.ActivityThread.access$700(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4946)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {com.app.sports/com.app.sports.CustomFullActivity}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:3208)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2629)
... 12 more
Caused by: java.lang.NullPointerException
at com.app.sports.CustomFullActivity.onActivityResult(CustomFullActivity.java:980)
at android.app.Activity.dispatchActivityResult(Activity.java:5390)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3204)
... 13 more
 

 

그 코드를 보아하니 아래와 같습니다.

File f = new File(mImageCaptureUri.getPath()); /****에러***/

사진 찍거나 불러오는 코드인데 사용자는 갤 3였구요.

이런 보고서는 처음인데 어떻게 하다가 이런 현상이 발생됐는지 알 수도 없구요.

 

의심할 만한 상황이 어떤게 있나요?

 

 

@Override
	  protected void onActivityResult(int requestCode, int resultCode, Intent data)
	  {
	    if(resultCode != RESULT_OK)
	    {
	      return;
	    }

	    switch(requestCode)
	    {
	      case CROP_FROM_CAMERA:
	      {
	        // 크롭이 된 이후의 이미지를 넘겨 받습니다.
	        // 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
	        // 임시 파일을 삭제합니다.
	        final Bundle extras = data.getExtras();
	      
	        if(extras != null)
	        {
	          Bitmap photo = extras.getParcelable("data");
	          mPhotoImageView.setImageBitmap(photo);
	        }
	  
	       
	        // 임시 파일 삭제
	        File f = new File(mImageCaptureUri.getPath()); /****에러***/
	        if(f.exists())
	        {
	          f.delete();
	        }
	  
	        break;
	      }
	  
	      case PICK_FROM_ALBUM:
	      {
	        // 이후의 처리가 카메라와 같으므로 일단  break없이 진행합니다.
	        // 실제 코드에서는 좀더 합리적인 방법을 선택하시기 바랍니다.
	        
	        mImageCaptureUri = data.getData();
	      }
	      
	      case PICK_FROM_CAMERA:
	      {
	        // 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.
	        // 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.
	  
	        Intent intent = new Intent("com.android.camera.action.CROP");
	        intent.setDataAndType(mImageCaptureUri, "image/*");
	  
	        intent.putExtra("outputX", 120);
	        intent.putExtra("outputY", 130);
	        intent.putExtra("aspectX", 1);
	        intent.putExtra("aspectY", 1);
	        intent.putExtra("scale", true);
	        intent.putExtra("return-data", true);
	  
	        startActivityForResult(intent, CROP_FROM_CAMERA);
	  
	  
	        break;
	      }
	    }
	  

	   
	  }

 

브루스웨인 (8,580 포인트) 님이 2014년 7월 30일 질문
브루스웨인님이 2014년 7월 30일 수정

2개의 답변

0 추천
 
채택된 답변

CustomFullActivity.java:980 여기서 에러나네요

예외처리하면 끝.

쭈쭈총각 (17,750 포인트) 님이 2014년 7월 30일 답변
브루스웨인님이 2014년 9월 5일 채택됨
트라이 캐치로 널포인트예외처리하라는 말씀이시죠?
그럼 널포인트예외처리시 해야할 동작은 어떤 걸 해줘야 하나요?
if(객체 != null ) {
  원래 하고자하는 동작
} else {
인터넷이 끊겨 저객체에 제대로된 데이터가 들어오지않을 경우 처리할 동작
}
제가 브루스웨인님 앱이 어떤건지도 모르는데 예외처리시 해야할 동작까지 어떻게 아나요 ㅎㅎ
아 그렇죠.  제가 더 고민해보겠습니다.
0 추천
mImageCaptureUri 나 mImageCaptureUri.getPath가 null 이겠네요

나눠서 체크해보세요. 어느게 null인지

전자면 값 세팅이 안된거고, 후자는 path 를 못가져온거겠네요.
Gioskhan (12,060 포인트) 님이 2014년 7월 30일 답변
이게 그 기종 폰이 없다보니 난감하네요 ㅠ
재현도 재현이지만, 위 코드에서 예외처리가 부실하네요.
mImageCaptureUri 값 null 체크 없이 바로 getPath 해버리고 그 값 또한 null체크 없이 바로 File 객체 생성을 하네요.. 이건 코드 보완이 필요할것 같습니다.
null일 경우에는 어떤 동작을 취해야 하나요? 그냥 메시지를 띄우거나 해서 사용자에게 알려줘야되는건지 궁금합니다. null일 경우 앱이 죽어버리는데 예외처리를 한다쳐도 앱을 제대로 사용할 수 없는 경우가 생길 것 같아서요.

null일 경우에도 앱이 돌아가도록 할 수 있는 처리가 어떤 건지..
...