使用Handler产生空指针异常的问题

my1249KB 2012-04-13 05:09:33
我想用Handler刷新TabActivity中TextView里的文本,通过点击菜单项刷新,可为什么总是报空指针异常

关键代码:

	
private class MyHandler extends Handler {

public MyHandler(Looper looper){
super(looper);
}

@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SET:
Test.this.text1_1_2.setText(msg.obj.toString());

}
super.handleMessage(msg);
}

};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, R.string.menu1);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (item.getItemId() == 1) {
Looper looper = Looper.myLooper();
MyHandler myHandler = new MyHandler(looper);
myHandler.removeMessages(0);
String data = "ABCDE";
Message msg = myHandler.obtainMessage(SET,1,1,data);
myHandler.sendMessage(msg);

}
return super.onMenuItemSelected(featureId, item);

}


错误信息:

04-13 09:02:22.404: E/AndroidRuntime(919): FATAL EXCEPTION: main
04-13 09:02:22.404: E/AndroidRuntime(919): java.lang.NullPointerException
04-13 09:02:22.404: E/AndroidRuntime(919): at zzx.Android.Test$MyHandler.handleMessage(Test.java:108)
04-13 09:02:22.404: E/AndroidRuntime(919): at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 09:02:22.404: E/AndroidRuntime(919): at android.os.Looper.loop(Looper.java:123)
04-13 09:02:22.404: E/AndroidRuntime(919): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-13 09:02:22.404: E/AndroidRuntime(919): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 09:02:22.404: E/AndroidRuntime(919): at java.lang.reflect.Method.invoke(Method.java:521)
04-13 09:02:22.404: E/AndroidRuntime(919): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-13 09:02:22.404: E/AndroidRuntime(919): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-13 09:02:22.404: E/AndroidRuntime(919): at dalvik.system.NativeStart.main(Native Method)


...全文
515 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
my1249KB 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

这样使用Handler是没问题的,
text1_1_2在使用之前是需要findViewByID来获得控件对象的
[/Quote]

已经解决了!!就是findViewByID这句的问题。

我把这句:
TextView text1_1_2 = (TextView)findViewById(R.id.tab1_1_2);


改成:
this.text1_1_2 = (TextView)findViewById(R.id.tab1_1_2);


就对了。

貌似我没搞清楚局部变量和全局变量的概念 - -

多谢楼上二位了!
download821106 2012-04-13
  • 打赏
  • 举报
回复
这样使用Handler是没问题的,
text1_1_2在使用之前是需要findViewByID来获得控件对象的
my1249KB 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

查一查ext1_1_2 有没有
[/Quote]

这个有的。

private TextView text1_1_2 = null;


TextView text1_1_2 = (TextView)findViewById(R.id.tab1_1_2);

download821106 2012-04-13
  • 打赏
  • 举报
回复
text1_1_2.setText(msg.obj.toString());
---------------------------------------------
text1_1_2 或 msg.obj 为Null,提示说的很清楚了啊
danielinbiti 2012-04-13
  • 打赏
  • 举报
回复
查一查ext1_1_2 有没有

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧