2014-05-24 47 views
0

即时通讯需要解决方案abot如何从服务变量更改UI,即时消息从服务聊天消息,我知道如何将消息转换为字符串,但我不知道如何发送他们到UI或其他活动,这是我的服务:从packetlistener服务发送数据到UI

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); 
      } 

我有奥托的情况下,公交车库数据属于,所以我试图用intent和otto在mhandler.post之前,但似乎它完全停止了这个过程......可以你们帮我在这里?感谢

这里我做了mHandler.obtainMessage:

messages.add(fromName + ":"); 
     messages.add(message.getBody()); 
     Log.i("XMPPChatDemoActivity",message.getBody()); 
     mHandler.obtainMessage(1,message).sendToTarget(); 

     mHandler.post(new Runnable() { 
      public void run() { 
    //  setListAdapter(); 

      } 
     }); 

,并在活动:

private class getit extends Handler{ 

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

回答

1

我做了我的活动中的私有类,它扩展处理程序。

有了这条线,你可以发送邮件:

mHandler.obtainMessage(int, message).sendToTarget(); 

处理程序类提供了一个callbackFunction参数,你可以对消息作出反应。

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

这样,你有你的活动的Message访问,可以将其添加到您的ListView。

+0

请问什么是int?我试了一下,创建活动中的私有类,味精了身体,却没有什么:( – user3660198

+0

也应我把什么东西在sendtotarget? – user3660198

+0

你只是传递一个对象时,INT可用于指定的类型如果对象可以有更多类型的不仅仅是一个类型'Message' – Fenix