android中handler接收不到消息的问题
先上一些代码privatefinalHandlerhandler=newHandler(){@OverridepublicvoidhandleMessage(finalM...
先上一些代码
private final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msg) {
String urlAddress = msg.getData().getString("URL");
String url = urlAddress.split(":")[1];
// 根据名字生成URL
url = "http://index.aspx?"
+ url
+ "/post?action=thread&_max_ajaxids_=ap_topicdatas,ap_buttons,ap_error,post_success";
}
};
//服务器URL获取线程
private void getURLRequest(String userName) {
new Thread() {
@Override
public void run() {
try {
String urlAd = UDPClient.getUDP("张三");
sendURLMessage(urlAd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
//发送成功获取的url到handler
public void sendURLMessage(String url){
String result = url;
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("URL", result);
message.setData(bundle);
DiaryActivity.this.handler.sendMessage(message);
}
现在是调用了handler.sendMessage之后,在handlerMessage没有响应.
请教是哪里的问题 展开
private final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msg) {
String urlAddress = msg.getData().getString("URL");
String url = urlAddress.split(":")[1];
// 根据名字生成URL
url = "http://index.aspx?"
+ url
+ "/post?action=thread&_max_ajaxids_=ap_topicdatas,ap_buttons,ap_error,post_success";
}
};
//服务器URL获取线程
private void getURLRequest(String userName) {
new Thread() {
@Override
public void run() {
try {
String urlAd = UDPClient.getUDP("张三");
sendURLMessage(urlAd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
//发送成功获取的url到handler
public void sendURLMessage(String url){
String result = url;
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("URL", result);
message.setData(bundle);
DiaryActivity.this.handler.sendMessage(message);
}
现在是调用了handler.sendMessage之后,在handlerMessage没有响应.
请教是哪里的问题 展开
展开全部
关键是handler里面的代码执行不到。。。线程执行完毕代码就结束了
第一,你怎么知道handler没执行。你的判定条件已经错了。他一定不会执行里面的语句,
第二,我刚才说过,handler 会维护一个消息栈,不一定马上执行。也许你的线程执行完了。他也没执行,也许线程没执行完,他就执行了。。。
try {
new Thread() {
public void run() {
json = ParserComment.comment(DrImageActivity.this,
UserInfo.getInstance().getUser(), favID,
ediTextComment);
System.out.println("j =" + json);
Message msg = new Message();
msg.what = COMMENTA;
handler.sendMessage(msg);
};
}.start();
System.out.println("不执行handler,反而向下执行");
} catch (Exception e) {
e.printStackTrace();
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case LIKE:
if (i == 0) {
// 喜欢成功
Toast.makeText(context, "喜欢成功", 0).show();
} else {
// 喜欢失败
Toast.makeText(context, "取消喜欢", 0).show();
}
break;
case COMMENTA:
if (json != null) {
try {
JSONObject object = new JSONObject(json);
int resultCode = object.getInt("resultCode");
if (resultCode == 0) {
// 评论成功
Toast.makeText(context, "评论成功", 0).show();
linearlayout_view.setVisibility(View.VISIBLE);
ll.setVisibility(View.VISIBLE);
lll.setVisibility(View.VISIBLE);
relativelayout_view.setVisibility(View.GONE);
} else if (resultCode == 1) {
// 评论失败
Toast.makeText(context, "评论失败", 0).show();
linearlayout_view.setVisibility(View.VISIBLE);
ll.setVisibility(View.VISIBLE);
lll.setVisibility(View.VISIBLE);
relativelayout_view.setVisibility(View.GONE);
} else if (resultCode == 2){
Toast.makeText(context, "评论达到最大值", 0).show();
linearlayout_view.setVisibility(View.VISIBLE);
ll.setVisibility(View.VISIBLE);
lll.setVisibility(View.VISIBLE);
relativelayout_view.setVisibility(View.GONE);
}
// 点击确定后,取消输入法
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(
dr_activity_images_ed_content.getWindowToken(), 0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
}
};
};
第一,你怎么知道handler没执行。你的判定条件已经错了。他一定不会执行里面的语句,
第二,我刚才说过,handler 会维护一个消息栈,不一定马上执行。也许你的线程执行完了。他也没执行,也许线程没执行完,他就执行了。。。
try {
new Thread() {
public void run() {
json = ParserComment.comment(DrImageActivity.this,
UserInfo.getInstance().getUser(), favID,
ediTextComment);
System.out.println("j =" + json);
Message msg = new Message();
msg.what = COMMENTA;
handler.sendMessage(msg);
};
}.start();
System.out.println("不执行handler,反而向下执行");
} catch (Exception e) {
e.printStackTrace();
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case LIKE:
if (i == 0) {
// 喜欢成功
Toast.makeText(context, "喜欢成功", 0).show();
} else {
// 喜欢失败
Toast.makeText(context, "取消喜欢", 0).show();
}
break;
case COMMENTA:
if (json != null) {
try {
JSONObject object = new JSONObject(json);
int resultCode = object.getInt("resultCode");
if (resultCode == 0) {
// 评论成功
Toast.makeText(context, "评论成功", 0).show();
linearlayout_view.setVisibility(View.VISIBLE);
ll.setVisibility(View.VISIBLE);
lll.setVisibility(View.VISIBLE);
relativelayout_view.setVisibility(View.GONE);
} else if (resultCode == 1) {
// 评论失败
Toast.makeText(context, "评论失败", 0).show();
linearlayout_view.setVisibility(View.VISIBLE);
ll.setVisibility(View.VISIBLE);
lll.setVisibility(View.VISIBLE);
relativelayout_view.setVisibility(View.GONE);
} else if (resultCode == 2){
Toast.makeText(context, "评论达到最大值", 0).show();
linearlayout_view.setVisibility(View.VISIBLE);
ll.setVisibility(View.VISIBLE);
lll.setVisibility(View.VISIBLE);
relativelayout_view.setVisibility(View.GONE);
}
// 点击确定后,取消输入法
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(
dr_activity_images_ed_content.getWindowToken(), 0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
}
};
};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
跟 final 不 final 的没关系。你这段代码可以分两块儿测试,一块儿是 UDP 接收;另一块儿是 Handler 接发消息。
你确定 UDP 那没有问题吗?
我用你的代码只能测试 Handler 这块儿,并没有发现问题……
PS:Message 对象不提倡直接 new 出来,可以调用 Message#obtain() 工厂方法或者 Handler#obtainMessage() 方法……第二种,直接调用 Message#sendToTarget() 就可以发送消息了。
你确定 UDP 那没有问题吗?
我用你的代码只能测试 Handler 这块儿,并没有发现问题……
PS:Message 对象不提倡直接 new 出来,可以调用 Message#obtain() 工厂方法或者 Handler#obtainMessage() 方法……第二种,直接调用 Message#sendToTarget() 就可以发送消息了。
追问
问题解决了,其实代码是没问题的只是Eclipse不命中断点造成的假象...
另外学习了你的message操作方法,谢谢啦~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设置message.what的值,再试一下。
更多追问追答
追问
不顶用...
追答
你把两个final去掉。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询