0
Xmpp 채팅 응용 프로그램에서 작업 중입니다.메시지 처리기에서 AlertDialog 사용
내 PacketListener에서 구독 요청을 처리하려고하는데 AlertDialog를 제외한 모든 기능이 작동합니다. 표시되지 않으므로 사용자로부터 확인을받을 수 없습니다.
내가 해봤
Toast.makeText()
- 이
getApplicationContext()
대신Display.this
UI (텍스트 뷰) 변경 그러나 그들 중 누구도 작동하지 않습니다.
내가 말했듯이, 나는 어떤 에러도 내지 않았고, 또한 디버깅을 시도했다. 코드면에서 작동하는 것 같다.
다음내 코드는,
//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
}
Handler를 사용하여이 문제를 해결하기 위해, UI 위젯을 사용하는 UI 스레드에서해야 말했듯이. 나 자신 안드로이드를 사용하지 않은하지만 이것은 일반적으로 자바 GUI 프레임 워크의 경우입니다. 그 외에도 독자 상호 작용을 통해 독자 스레드를 차단하고 있습니다.이 IMHO는 매우 나쁜 생각입니다. – Robin
@Robin, 귀하의 의견은 내 문제를 고맙게 생각하는 데 매우 도움이되었다. – ocanal