asmack 패킷에 대한 수신기를 작성하려고합니다. 일어나는 일은 청취자가 가끔씩 패킷을 얻지 않고 처리하는 경우입니다. 여기서, 코드의 일부이다 : 이것은 AsyncTask를의 doInBackground (문자열 PARAMS ...) 부분의 내부Smack Packet Listener가 실행되지 않음
try {
XMPPMethods.getConnection().addPacketListener(new PacketListener() {
@Override
public synchronized void processPacket(Packet packet) {
if (packet.getPacketID().equals(lastCustomIQId)) {
android.os.Message msg = new android.os.Message();
msg.obj = privateData;
msg.what = XMPPMethods.ADD_CONTACT_RESULTS;
AddContact.addContactHandler.sendMessage(msg);
}
}
}, new PacketIDFilter(lastCustomIQId));
참고있다.
패킷을 사용하여 전송되고 :
JIDIQ가 asmack의 IQ이다JIDIQ.setPacketID(lastCustomIQId);
JIDIQ.setFrom(XMPPMethods.getCurrentUserFullUserName());
JIDIQ.setType(Type.GET);
XMPPMethods.getConnection().sendPacket(JIDIQ);
. 이 코드는 모두 올바르게 실행됩니다. 그러나 때때로 PacketListener는 전송 된 패킷을받지 못합니다. 대신에 PacketCollector를 사용해야하는지, 아니면 리스너가 어떻게 든 죽어 가고 있는지 궁금합니다. 아무도 이것이 패킷을받지 못하는 이유를 알고 있습니까? 이 주제에 대한 지식이 있으면 대단히 감사하겠습니다!
나는 이것을 테스트했으며 패킷 ID는 항상 필터 ID와 일치합니다. 또한 ID로 상수를 사용하고 다른 유형의 필터를 사용하여 시도했다. 세 가지 필터 설정 모두 동일한 결과를 얻습니다. 참고 : 활동을 입력 할 때 패킷을 처음 수신 한 경우 IQ를 쿼리하고 패킷을 전송 한 횟수와 상관없이 항상 작동합니다. 반대의 경우도 마찬가지입니다. 활동에 들어가고 패킷이 수신기에서 선택되지 않으면 이후의 모든 IQ 패킷은 수신기에서 수신되지 않습니다. –
@JonathanCornwell 청취자를 등록한 연결이 패킷을받는 연결과 같은지 확인 했습니까? (예를 들어, 연결이 변경 되었기 때문에 클라이언트가 연결을 끊었다가 다시 연결하지만 새 연결에는 수신기가 없습니다.) –
이것도 테스트했지만 연결은 변경되지 않습니다. 나는 모든 액티비티가 공개 버전의 연결에 액세스하여 동일한 결과로 연결이 변경되지 않도록하기 위해 만들었습니다. 업데이트 : 활동을 열면 수신기가 실행될 때마다 보낸 모든 패킷에 대해 올바르게 실행되는 것처럼 보입니다. 그러나 리스너가 실행되지 않으면 전달 된 모든 패킷에 대해 실행되지 않습니다. 활동을 닫고 다시 열면이를 변경할 수 있지만 (작동/작동하지 않음) 이상한 점은 활동을 열거 나 닫은 상태에서 청취자에게 영향을주는 것은 변경되지 않는다는 것입니다. –