利用Handler 传送消息 为什么 空指针???

黛曦葛溪 发布于 2012/06/29 13:19
阅读 1K+
收藏 0
/**
下面这段是判断服务器上数据库版本与本地数据库版本的
int verson = DatabaseHelper.version;
			if (verson==serviceVersion) {  
				Intent intent = new Intent();  
				startActivity(intent);  
				finish();  
			} else {  
				System.out.println("开始调用升级程序 。。。。");
				sendUpdateMessage();  
			}  
		} catch (Exception e) {
			//Message msg = new Message();
			//msg.what = MainActivity.connect_service_error;
			//handler.sendMessage(msg);
			e.printStackTrace();

		}
	}
//下面打印都可以出来,但是到了主线程里面 消息都没接受到。。
	private void sendUpdateMessage() {
		Message msg = new Message();  
		System.out.println("利用handler 传送消息");
		msg.what = MainActivity.Need_Update; 
		System.out.println("利用handler 传送消息"+msg.what);
		handler.sendMessage(msg);  

	}

//Activity里面的部分代码。。。。
        public static final int Need_Update = 1;
	public static final int  connect_service_error = 2;
	public static final int show_message = 3;
	public static final int hide_message = 4;
	private final Handler handler = new Handler(){
		public void handleMessage(Message msg){
			super.handleMessage(msg);
			switch(msg.what){
			case 1://检查到  需要升级信息
				System.out.println("接收到了消息。。。。。。");
				showUpdateDialog();
				break;
			case connect_service_error://连接服务器出错信息
				showErrorDialog();
				break;
			case show_message://显示信息
				
			tv_copydb.setVisibility(View.VISIBLE); 
				break;
			case hide_message://隐藏信息
				 tv_copydb.setVisibility(View.INVISIBLE);  
				break;
			}
		}
	};
//显示 提示 升级的  Dialog方法

public void showUpdateDialog() {
		
		System.out.println("数据库有更新是否升级?");
		final AlertDialog.Builder builder = new Builder(MainActivity.this);
		builder.setTitle("数据库有更新是否升级?");
		builder.setPositiveButton("确定",new OnClickListener(){

			@Override
			public void onClick(DialogInterface dialog, int which) {
				final ProgressDialog pd = new ProgressDialog(MainActivity.this);
				pd.setTitle("升级中。。。请等待");
				pd.show();
				try{
					new Thread(){
						public void run(){
							
							try{
								file = DownloadService.getFile(UpdateXmlPath.getUrl());//要解析的i.xml 文件的url
								new Thread(new ResolveUpdateXml()).start();//执行解析下载下来的xml文件
								
							}catch(Exception e){
								e.printStackTrace();
							}
						}
					};
				}
				catch(Exception e){
					e.printStackTrace();
				}
			}

		});
	}
  

加载中
0
黛曦葛溪
黛曦葛溪
我也不知道为什么,只要把检查的方法写在Activity 里面就可以把消息传过去了,之前写的是 sendmessage  在另一个 类里面,消息就没穿过去。
0
迷途d书童
迷途d书童
去掉 super .handleMessage(msg);
迷途d书童
迷途d书童
回复 @朱洋洋 : 不用啊
黛曦葛溪
黛曦葛溪
还是不行。。。Handler 传递消息必须要用TextView 吗?
0
黛曦葛溪
黛曦葛溪

引用来自“迷途d书童”的答案

去掉 super .handleMessage(msg);
//还是不行。。。说这个方法里面传过去的消息时空的。。
private void sendUpdateMessage() {
		Message msg = new Message();  
		System.out.println("利用handler 传送消息");
		msg.what = MainActivity.Need_Update; 
		System.out.println("利用handler 传送消息"+msg.what);
		handler.sendMessage(msg); 

	}

黛曦葛溪
黛曦葛溪
回复 @迷途d书童 : 是空的。。。他执行到打印出来 那 要传送的消息后就不再执行了。。。。
迷途d书童
迷途d书童
你调试跟踪一下,看看sendMessage的时候msg是不是空的
0
黛曦葛溪
黛曦葛溪

引用来自“朱洋洋”的答案

引用来自“迷途d书童”的答案

去掉 super .handleMessage(msg);
//还是不行。。。说这个方法里面传过去的消息时空的。。
private void sendUpdateMessage() {
		Message msg = new Message();  
		System.out.println("利用handler 传送消息");
		msg.what = MainActivity.Need_Update; 
		System.out.println("利用handler 传送消息"+msg.what);
		handler.sendMessage(msg); 

	}

private boolean sendUpdateMessage() {
		//Bundle bundle=new Bundle();
		//Message msg = handler.obtainMessage();  
		//bundle.putInt("msg",MainActivity.Need_Update);
		Message msg = new Message();
		System.out.println("利用handler 传送消息");
		msg.what = MainActivity.Need_Update; 
		System.out.println("利用handler 传送消息"+msg.what);
		System.out.println(handler.sendMessage(msg)+"传到主线程里面的=======");
		 return handler.sendMessage(msg);
	}
这里打印到  System.out.println("利用handler 传送消息"+msg.what); 
下面的 就打印不出来了。。。。所以return 的  消息根本没穿过去。。。它自己都没有消息。。。怎么回事啊?

0
水太凉
水太凉
能把LogCat里的出错信息贴出来吗?
返回顶部
顶部