我在TextView
中正确初始化了Activity
。
我可以在代码中使用它而没有任何问题。在onPause()
方法中,我使用myTextView.setText("");
。如果我按下主页按钮或我开始新的Activity
,它可以正常工作,但是当我使用电源按钮关闭屏幕电源时,NullPointerException
行会引发setText()
。
我想在调用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()
。是什么导致这个?
答案 0 :(得分:2)
我怀疑此处的问题是您没有先在方法中调用super.onPause()
并获得SuperNotCalledException
。
你想要这样的东西:
@Override
protected void onPause() {
super.onPause();
myTextView.setText("");
}
答案 1 :(得分:0)
我在[this] [1]问题的答案中找到了我的问题的答案。
屏幕锁定在纵向模式下重新创建Activity
,因为它是屏幕锁定后的Android默认行为。
之后立即致电onResume
和onPause
,导致NullPointerException
,因为AsyncTask
尚未完成他的工作。
所以我通过简单地检查值是否为空(尚未初始化)来解决这个问题