我有一个TextView
在我的 Activity
中正确初始化。
我可以在代码中使用它,没有任何问题。在 onPause()
方法,我用myTextView.setText("");
。如果我按主页按钮或启动一个新的Activity
,它就可以正常工作。 ,但是当我使用电源按钮关闭屏幕电源时,我得到 NullPointerException
由 setText()
抛出线。
我猜我的类(class)成员被onPause()
之前的断电事件重置为空叫做。
处理此案的正确方法是什么?
我应该看广播吗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("");
}
关于java - 屏幕关闭时 OnPause 返回 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180294/