Java 将数据从packetlistener服务发送到UI

Java 将数据从packetlistener服务发送到UI,java,android,Java,Android,我需要一个解决方案。关于如何从服务变量更改用户界面,我正在收听来自服务的聊天信息,我知道如何将信息转换为字符串,但我不知道如何将其发送到用户界面或其他活动,以下是我的服务: public void setConnection(XMPPConnection connection) { this.connection = connection; if (connection != null) { // Add a packet listener to get messages sent to

我需要一个解决方案。关于如何从服务变量更改用户界面,我正在收听来自服务的聊天信息,我知道如何将信息转换为字符串,但我不知道如何将其发送到用户界面或其他活动,以下是我的服务:

 public void setConnection(XMPPConnection connection) {
this.connection = connection;
if (connection != null) {
  // Add a packet listener to get messages sent to us
  PacketFilter filter = new MessageTypeFilter(Message.Type.chat);

  connection.addPacketListener(new PacketListener() {
@Override
    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.post(new Runnable() {
          public void run() {
            setListAdapter();
          }
        });
      }
    }
  }, filter);

}
}
这里是数据在主要活动中的位置

 public void setListAdapter() {
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
 R.layout.listitem, messages);
            listview.setAdapter(adapter);
          }
在活动中:

private class getit extends Handler{

public void handleMessage(Message msg)
{
    mHandler.post(new Runnable() {
        public void run() {
          setListAdapter();
        }
      });
}
}

我在我的活动中创建了一个私有类来扩展处理程序

通过这一行,您可以发送消息:

mHandler.obtainMessage(int, message).sendToTarget();
Handler类提供了一个callbackfunction,您可以在其中对消息做出反应

@Override
public void handleMessage(Message msg) {
    // your code to show the message
}

这样,您就可以在活动中访问
消息
,并将其添加到ListView中。

我可以问一下int的用途吗?我试过了,在活动中创建了一个私有类,从msg获得了主体,但什么都没有:(我还应该在sendtotarget中添加任何内容吗?如果只传递一个对象,则可以使用int来指定对象的类型,如果可以有多个类型而不仅仅是一个类型
Message
No,则该函数不需要任何参数。当您尝试这样做时,LogCat中显示了哪些错误?或者您的意思是什么“似乎停止”?服务和活动中都不需要mHandler.post或runnable。只需调用函数setListAdapter即可
@Override
public void handleMessage(Message msg) {
    // your code to show the message
}