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
}