Android 在消息处理程序中使用AlertDialog
我正在开发一个Xmpp聊天应用程序 在我的PacketListener中,我正在尝试处理订阅请求,除了AlertDialog之外,所有这些都像一个符咒一样工作。它没有显示,所以我无法从用户那里得到确认 我试过了Android 在消息处理程序中使用AlertDialog,android,xmpp,handler,android-alertdialog,asmack,Android,Xmpp,Handler,Android Alertdialog,Asmack,我正在开发一个Xmpp聊天应用程序 在我的PacketListener中,我正在尝试处理订阅请求,除了AlertDialog之外,所有这些都像一个符咒一样工作。它没有显示,所以我无法从用户那里得到确认 我试过了 Toast.makeText() 更改用户界面(文本视图) getApplicationContext()而不是显示。此 但它们都不起作用 正如我所说,我没有得到任何错误,我也尝试过调试,它似乎在代码方面工作 这是我的密码 //imports.... public class Dis
Toast.makeText()
- 更改用户界面(文本视图)
而不是getApplicationContext()
显示。此
//imports....
public class Display extends Activity {
//....more codes
private void addListener() {
//subscribe request handler
Roster roster = conn.getRoster();
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
PacketListener packetListener = new PacketListener() {
@Override
public void processPacket(Packet packet) {}
};
conn.addPacketListener(packetListener, new PacketFilter(){
@Override
public boolean accept(Packet packet) {
// TODO Auto-generated method stub
final Presence presence = (Presence)packet;
subscriptonAnswer = false;
if(packet instanceof Presence) {
if(((Presence)packet).getType().equals(Presence.Type.subscribe)) {
new AlertDialog.Builder(Display.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Subscription Message")
.setMessage(StringUtils.parseName(packet.getFrom())+ " wants to add you, do you accept?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
Presence reply = new Presence(Presence.Type.subscribed);
reply.setTo(presence.getFrom());
conn.sendPacket(reply);
}
})
.setNegativeButton("No", null)
.show();
}
}
return true;
}});
}
//....more codes
}
这是我第二次遇到同样的问题,但第一次的结构不同,所以第一次我就想不出来了 但这让我摆脱了这个问题 正如他所说,我必须在UI线程上使用UI小部件,以解决我使用的这个问题
我认为您需要在UI线程上使用UI小部件。我自己没有使用过Android,但java GUI框架通常就是这样。除此之外,您还通过用户交互阻止了阅读器线程,这是一个非常糟糕的主意。@Robin,您的评论对解决我的问题非常有帮助,谢谢。
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//I'm free to manage UI Widgets here
}
};
//......
// I have to just sendmessage here
if(packet instanceof Presence) {
if(((Presence)packet).getType().equals(Presence.Type.subscribe)) {
handler.sendEmptyMessage(0);
}
}
//......