2014-03-04 3 views
0

TextViewActivity에 올바르게 초기화되었습니다. 문제없이 코드에서 사용할 수 있습니다. onPause() 방법에서는 myTextView.setText("");을 사용합니다. 홈 버튼을 누르거나 새로운 Activity을 시작하면 정상적으로 작동하지만 화면의 전원을 끄려면 전원 버튼을 사용하면 setText() 라인이 표시되어 NullPointerException이 표시됩니다.화면이 꺼져있을 때 OnPause가 NullPointerException을 반환합니다.

onPause()을 호출하기 전에 클래스 멤버가 전원 끄기 이벤트에 의해 null로 재설정 된 것 같습니다. 이 케이스를 처리하는 올바른 방법은 무엇입니까?

SCREEN_OFF 브로드 캐스트를 수신해야합니까, 아니면 내 코드에 문제가 있습니까?

내 코드는 간단

@Override 
protected void onPause(){ 
    myTextView.setText(""); 
    super.onPause(); 
} 

같은 로그 캣 출력

03-04 19:58:44.783: E/AndroidRuntime(6717): FATAL EXCEPTION: main 
03-04 19:58:44.783: E/AndroidRuntime(6717): Process: com.myapp, PID: 6717 
03-04 19:58:44.783: E/AndroidRuntime(6717): java.lang.RuntimeException: Unable to pause activity {com.myapp/com.myapp.MyActivity}: java.lang.NullPointerException 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2307) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3758) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.ActivityThread.access$900(ActivityThread.java:145) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.os.Looper.loop(Looper.java:136) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.ActivityThread.main(ActivityThread.java:5081) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at dalvik.system.NativeStart.main(Native Method) 
03-04 19:58:44.783: E/AndroidRuntime(6717): Caused by: java.lang.NullPointerException 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at com.myapp.MyActivity.onPause(MyActivity.java:35) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.Activity.performPause(Activity.java:5335) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1233) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2285) 
03-04 19:58:44.783: E/AndroidRuntime(6717):  ... 11 more 

입니다 그리고 여기가 초기화 방법 내 TextView

내가가 AsyncTask 내부 초기화 알고
private TextView myTextView; 
@Override 
public void onResume() { 
    super.onResume(); 
    //new AsyncTask 
    //onPostExecute(){ 
    myTextView = (TextView) findViewById(R.id.textView1); 
    //}}.execute(); 
} 

, 하지만 난 확실히 그것을 사용하실 수 있습니다 Activity lif ecycle. 나는 Button을 클릭하면 텍스트가 바뀌고 작동하며, 또한 onPause()이 작동합니다. 내 Activity 수행 예상대로 onPause(), 다음 onResume()onPause() 즉시 나중에 전원 버튼을 누를 때 어떤 이상한 이유로 : 화면이

UPDATE ... 꺼져있는 경우에만 발생합니다. 무엇이 이것을 일으킬 수 있습니까?

+0

입니다. logcat 출력을 게시 할 수 있습니까? onPause()가 호출 될 때 textview가 0이되지 않습니다 .. – Decoy

+0

전체 활동 코드 게시 – Raghunandan

+0

@Deacoy 화면이 꺼져있을 때만 발생합니다. – Vektor88

답변

2

나는이 방법에서 super.onPause()을 먼저 호출하지 않았고 SuperNotCalledException을 얻었습니다.

@Override 
protected void onPause() { 
    super.onPause(); 
    myTextView.setText(""); 
} 
+0

시도했지만 동일한 오류가 발생합니다 – Vektor88

+1

로그를 게시해야하고 자세한 도움말을 보려면'myTextView'가 할당 된 위치에 있어야합니다. –

0

내가 [이] [1] 질문에 대한 대답에 내 질문에 대한 답을 발견

는이 같은 것을 원한다. 화면 잠김 후 Android 기본 동작이므로 화면 잠금이 내 Activity 세로 모드로 다시 생성되었습니다. onResume 및 을 바로 뒤에 호출하면 AsyncTask이 작업을 완료하지 않았기 때문에 NullPointerException이 발생했습니다.

그래서이 값은 null 값이 아닌지 (아직 초기화되지 않았 음)

+0

이것은 반드시 좋은 습관은 아닙니다. 이 기사를 읽으십시오 : http://developer.android.com/guide/topics/resources/runtime-changes.html – BVB

+0

이 경우에는 부작용이 없습니다. 응용 프로그램은 가로 모드에서만 작동하며 리소스/데이터를 수동으로 처리 할 필요가 없습니다. 화면이 꺼져 있는지 확인하고 결과적으로 아무 것도하지 않는 것은 나쁜 습관입니다. 왜냐하면 화면이 여전히 검정 인 동안 oncreate와 onresume이 호출되어 화면 잠금 해제 직후에'NullPointerException'을 얻을 것이기 때문입니다. – Vektor88

+2

이것은 요점이 아닙니다. 이러한 이유 외에도 귀하의 활동을 재창조 할 수있는 많은 이유가 있습니다. 당신이하는 일은 벌레를 숨기는 것뿐입니다. 정답은 버그를 수정하고, 라이프 사이클 메소드를 올바르게 코딩하고, ** android : configChanges = "keyboardHidden | orientation | screenSize"'를 제거하는 것입니다. 해킹 이상입니다. 이 경로를 계속 진행하면 테스트에서 발견하거나 발견하지 못할 수도있는 버그가 앱에 있습니다. 예 : 이제 앱을 실행 한 다음 자신에게 전화하십시오. 그것은 추락합니까? 가장 가능성이 높습니다. 특히 휴대 전화가 울리면 앱이 백그라운드에있는 경우에 특히 그렇습니다. – Simon

관련 문제