簡體   English   中英

屏幕關閉時,OnPause返回NullPointerException

[英]OnPause return NullPointerException when screen is turned off

我在我的Activity正確初始化了TextView 我可以在代碼中使用它而沒有任何問題。 onPause()方法中,我使用myTextView.setText(""); 如果我按下主頁按鈕或我開始一個新的Activity它工作正常,但當我使用電源按鈕關閉屏幕時,我得到一個由setText()行拋出的NullPointerException

我想在調用onPause()之前,我的類成員被斷電事件重置為null。 處理這種情況的正確方法是什么?

我應該抓住廣播SCREEN_OFF還是我的代碼有問題?

我的代碼很簡單

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

Logcat輸出

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

private TextView myTextView;
@Override
public void onResume() {
    super.onResume();
    //new AsyncTask
    //onPostExecute(){
    myTextView = (TextView) findViewById(R.id.textView1);
    //}}.execute();
}

我知道它是在AsyncTask初始化的,但我肯定可以在Activity生命周期中使用它。 我有一些Button ,如果點擊更改其文本,他們工作,也onPause()工作。 這僅在屏幕關閉時發生...

更新:出於一些奇怪的原因,當我按下電源按鈕時,我的Activity按預期執行onPause() ,然后稍后執行onResume()onPause() 是什么導致這個?

我懷疑這里的問題是你沒有在方法中首先調用super.onPause()並得到一個SuperNotCalledException

你想要這樣的東西:

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

我在[this] [1]問題的答案中找到了我的問題的答案。 屏幕鎖定正在以縱向模式重新創建我的Activity ,因為它是屏幕鎖定后的Android默認行為。 onResume調用onResumeonPause導致NullPointerException因為AsyncTask還沒有完成他的工作。

所以我通過簡單地檢查值是否為空(尚未初始化)來解決這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM