通过Service中的处理程序发送消息

时间:2014-05-25 04:51:36

标签: java android

我使用asmack buddycloud 2010作为聊天应用程序,我尝试使用处理程序从我的服务器向活动发送聊天消息,这是我服务的代码部分:

 public void processPacket(Packet packet) {
      Message message = (Message) packet;
      if (message.getBody() != null) {
        String fromName = StringUtils.parseBareAddress(message.getFrom());
        Log.i("XMPPChatDemoActivity ", " Text Recieved " + message.getBody() + " from " 
 +  fromName);
        messages.add(fromName + ":");
        messages.add(message.getBody());
        Log.i("XMPPChatDemoActivity",message.getBody());
      mHandler.obtainMessage(123, "Message or data");
      mHandler.sendMessage(message);

这里的mhanlder.sendmessage我有一个错误,说类型处理程序中的方法sendMessage(消息消息)不适用于参数(org.jivesoft.smack.packet.message)

在活动中:

 Public CLass XMPPActivity extends Activity {

 .
 .
 .

  private class getmessage extends Handler{


public void handleMessage(Message msg) {
    setListAdapter();

}

 }

这里我不能覆盖handlemessage,它说我必须覆盖超类型方法!!!!你们知道怎么了吗?我错过了什么吗?感谢

当我用

替换它时
 mHandler.obtainMessage(123, message).sendToTarget();


i get nothing, because i can not override the handleMessage()

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式完成。

第1步

在您的活动中声明Handler说明在onCreate方法内。

Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case PASS:
            String obj = msg.obj.toString();
            Toast.makeText(YourActivity.this, "PASS",
                    Toast.LENGTH_SHORT).show();
            break;
        case FAIL:
            Toast.makeText(YourActivity.this, "FAIL",
                    Toast.LENGTH_SHORT).show();
            break;
        }
    }
};

第2步

声明Handler

中使用的2个常量
public static final int PASS = 1;
public static final int FAIL = 2;

第3步

要传递消息,请使用以下代码。

Message msg = new Message();
msg.what = PASS;
msg.obj = fromName;

在这里,您可以将msg.what更改为任何整数常量。您可以将任何类型的对象设置为msg.obj。但要确保您设置的对象类型,您只需要根据它来输入它。否则将抛出异常。