2011-08-24 3 views
1

카메라 사용과 관련된 임의의 문제를 다루고 있습니다. 카메라를 호출하기 전에이 이름의 파일을 저장할 UUID를 생성합니다. 그래서 같은 개인 변수에이 UUID를 저장 : - :카메라 의도를 사용할 때 Android 로컬 변수가 손실됩니다.

public void onPictureTaken(int index) 
    { 
     //First of all - remember picture in database for reference. 
     FileData.InsertFile(mContext, UUID.fromString(requestedFileName)); 

     //Reduce taken picture if needed, otherwise let it be original. 
     if (Preferences.getImageSize(mContext) > 0) 
     { 
      Imaging.scaleImageFile(mContext, requestedFileName, Preferences.getImageSize(mContext)); 
     } 

나는 사용자에게 문제 신고 예외를 볼 수 아래로 비등하는 카메라가 완료되면

private String requestedFileName; 

나는이 파일을 처리하고있어, 다음과 같은 형태 requestedFileName == onPictureTaken

Caused by: java.lang.NullPointerException 
at java.util.UUID.fromString(UUID.java:210) 
at com.idatt.views.FourImagesView.onPictureTaken(FourImagesView.java:151) 
at com.idatt.views.TrailerUnitView.onPictureTaken(TrailerUnitView.java:233) 

다라고 널 내 휴대 전화 (Nexus S) 및 에뮬레이터에서 원활하게 작동합니다. 그러나 사용자가이 예외를 신고하고 이것이 왜 발생하는지 알 수 없습니다 ..

+0

항상 requestedFileName 변수에 파일 이름을 저장 하시겠습니까? null 일 수 없다? – Shlublu

+0

그래, 완전히 바보 같은 버그가 아니라면 나는 100 % 확신 할 수 없다. ... – katit

답변

3

Nexus 휴대 전화 및 기타 기기에서 발생하는 것을 확인했습니다. DDMS를 사용하여 진행중인 작업을 살펴 ​​본다면 프로세스가 실제로 종료되었다가 다시 시작된다는 것을 알 수 있습니다. 따라서 귀하의 지방 정부는 분실되고 있습니다. 안드로이드는 기본적으로 프로세스를 죽이고 새 작업으로 전환 할 때 (그리고 대부분의 카메라 캡처 의도로 NEWTASK 플래그를 설정 함) 원할 때마다 다시 시작할 수 있기 때문에 계속 사용해야합니다.

클래스가 Activity 인 경우 onSaveInstanceState()을 사용하여 파일 이름을 저장 한 다음 onCreate()에있는 Bundle에서 다시 읽어 올 수 있습니다. 당신이 Activity하지 않은 경우

당신은 파일 이름을 저장하는 임시 장소로 SharedPreferences 저장소를 사용할 수 있습니다

private static void saveTempFileName(Context context, String filename) { 
    SharedPreferences settings = context.getSharedPreferences("whatever", 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString("com.yourstuff.whatever", filename); 
    editor.commit(); 
} 
+0

불행히도, 나는 그 전화기가 없기 때문에 불행히도 그것을 볼 수 없다. 나는 영속 상태에 대해 생각하고 있었지만, 내 경우에는 어떻게해야할지 모르겠다. 이것은 Activity가 아니며, 내 사용자 정의 View (LinearLayout을 확장)입니다. 주 (state)를 유지하기위한 메소드를 공개해야하고 부모 Activity에서 호출하는 메소드를 호출해야합니까? – katit

+0

그래, 그 전화기에서 일어난다. 'SharedPreferences'에 파일 이름을 쓰고 멤버 변수가'null' 인 경우 핸들러에서 다시 읽으십시오. –

1

@jeffamaphone 당신이 아마 응용 프로그램 구성 변경에 문제가있는 언급 한 바와 같이. 응용 프로그램 구성 변경은 응용 프로그램의 런타임 환경에 영향을 미치는 일이 발생할 때 발생합니다. 가장 주목할만한 것은 오리엔테이션 변경 또는 키보드 숨기기/보여주기입니다.

다음과 같이 시도해보십시오. 앱 시작, 앱 동작을 통한 카메라 앱 실행, 방향 변경, 적절한 조치를 통해 앱으로 돌아 가기 이 시퀀스가 ​​오류를 생성합니까? 그런 다음 구성 변경과 관련된 문제가 발생합니다. 일반적으로 방향이 변경되는 경우 (앱 설정에 따라 다름) Android 시스템이 활동을 다시 시작 (새 인스턴스 생성 및 생성)하여 UUID가 설정되지 않은 새로운보기를 생성합니다.

handling configuration changes을 참조하십시오.

+0

감사! 수표는 jeffamaphone에 간다. 그러나 당신은 나를 도왔다 (upvote). 오리엔테이션을 잊어 버렸습니다. 고정 된 세로 경우 내 응용 프로그램, 그래서 나는 그것을 tiltable 만들었고 예외를 즉시 에뮬레이트 할 수있었습니다. – katit

관련 문제