1

사용자로부터 사진을 가져 와서 Google 서버로 보내려고합니다. 갤러리에서 선택하거나 휴대 전화의 기본 카메라를 사용하여 새 사진을 찍는 두 가지 옵션을 제공합니다.Android : 카메라 인 텐트를 사용하여 사진을 찍어 java.io.File에 저장

갤러리 사진이 제대로 작동하므로 사진을 선택하여 아무 문제없이 보낼 수 있습니다. 하지만 카메라 옵션에서는 카메라가 열리고 사진이 찍히고 지정한 위치의 SD 카드에 문제가 없지만 응용 프로그램으로 돌아 오면 항상 NullPointerException이 발생하고 응용 프로그램이 강제 종료됩니다.

private String tempFilePath = "";  
... 
public void addPhotoUsingCamera() { 

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    tempFilePath = getOutputMediaFilePath(MEDIA_TYPE_IMAGE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(tempFilePath)));  
    startActivityForResult(intent, CAMERA_ACTIVITY_CODE); 
} 

을 그리고 내가 사진 찍은 얻을 다음을 사용 : 여기에 내가 무엇을

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

    switch (requestCode) { 
    ... 
    case CAMERA_ACTIVITY_CODE: 
     if (resultCode == Activity.RESULT_OK) {   
      picture = new File(tempFilePath); 
     } 
     break; 
    ... 
    } 
} 

가 나는 또한 case CAMERA_ACTIVITY_CODE: 내부

Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
ImageView image = (ImageView) findViewById(R.id.photoTaken); 
image.setImageBitmap(thumbnail); 

을 시도하지만 문제는 내가 시도 무엇 이 코드 부분에서는 항상 NullPointerException을 얻습니다.

202 행은 case CAMERA_ACTIVITY_CODE: 부분에 해당하는 logcat 정보가 있습니다.

01-31 23:40:13.154: ERROR/AndroidRuntime(8009): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=101, result=-1, data=null} to activity {com.ollaa.android/com.ollaa.android.share.ShareFinalScreen}: java.lang.NullPointerException 

01-31 23:40:13.154: ERROR/AndroidRuntime(8009): Caused by: java.lang.NullPointerException 
01-31 23:40:13.154: ERROR/AndroidRuntime(8009):  at com.ollaa.android.share.ShareFinalScreen.onActivityResult(ShareFinalScreen.java:202) 

모든 도움을 주시면 감사하겠습니다.

참고 : 카메라와 SD 카드와 관련된 AndroidManifest에서 필요한 모든 권한을 선언했습니다.

편집 : 카메라 작동이 내 앱으로 돌아올 때까지는 tempFilePath가 지속되지 않는다는 것을 깨달았습니다. 내 onCreate 메서드에서 tempFilePath에 대한 초기화를 넣었으나 onActivityResult 이외의 외부 함수에서이 함수에 도달하려고 시도하면이 시간 그림이 설정되지 않습니다. 나는 Java를 전혀 모르는 것처럼 느껴진다. 함수 내에서 클래스 변수를 변경하면 변경된 값은 해당 클래스의 모든 함수에서 볼 수 있어야한다 ??

답변

2

사용 :

intent.putExtra (MediaStore.EXTRA_OUTPUT myfile을);

파일이 '디스크'에 있어야합니다. 카메라 액티비티는 버그를 생성하지 않습니다. 따라서 당신은 사용해야합니다 myFile.createNewFile();
또한 카메라 활동은 경로가 아닌 파일로 보내야합니다. 이 같은

시도 뭔가 :

tempFilePath = getOutputMediaFilePath(MEDIA_TYPE_IMAGE); 
String fileName = "myPhoto"; 
File myFile = new File (tempFilePath,fileName); 
myFile.createNewFile(); 
// at this point stop the debugger and check if the file exists on the 'disk'. 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(myFile))); 

MediaStore.EXTRA_OUTPUT를 사용하지 않고이 작업을 수행 할 수있는 더 좋은 방법이있을 수 있습니다. 아마 다른 사용자가 도울 수 있습니다.

또한 사용자가 취소를 누르고 사진을 찍지 않으면 파일을 삭제해야합니다.

참고 : Android API 2.2를 사용하고 있습니다.

이 정보가 도움이되기를 바랍니다.

+0

나는 당신이 제안한 것을 시도했지만 아무런 효과가 없었습니다. 어쨌든 고마워 :) – ecem

관련 문제