gpt4 book ai didi

java - XMPP Smack 无法接收消息

转载 作者:行者123 更新时间:2023-12-01 10:22:10 25 4
gpt4 key购买 nike

我读了很多关于如何通过 smack 4.1 发送和接收消息的相关帖子和开火。根据我的理解,我实现了以下代码

我可以连接,我可以登录。但是当发送消息表单 user1 到 user2 时,我什么也没得到。

代码:

package passargad.ehsan;

import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.util.Log;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.chat.Chat;
import org.jivesoftware.smack.chat.ChatManager;
import org.jivesoftware.smack.chat.ChatManagerListener;
import org.jivesoftware.smack.chat.ChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import java.io.IOException;

public class XMPPservice extends Service {
XMPPTCPConnection connection;
String connectionMessages="";
ConnectionXMPP connectionXMPPAsynch =new ConnectionXMPP();

@Override
public void onCreate()
{
super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
connectionXMPPAsynch.execute();
}
catch (Exception e)
{
}
return super.onStartCommand(intent, flags, startId);

}
@Override
public void onDestroy() {
super.onDestroy();


}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}

class ConnectionXMPP extends AsyncTask<String,Void,String>
{

@Override
protected String doInBackground(String... params) {
connection = new XMPPTCPConnection(XMPPTCPConnectionConfiguration.builder()
.setServiceName("192.168.1.6").setUsernameAndPassword("ehsan", "123")
.setPort(9090).setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setCompressionEnabled(false).build());
connection.setUseStreamManagement(true);
connection.addConnectionListener(new ConnectionListener() {

@Override
public void connected(XMPPConnection connection) {
Log.d("connected", "yes connected successfully : ");

}

@Override
public void authenticated(XMPPConnection connection, boolean resumed) {
Log.d("connected","yes authenticated successfully : ");
}

@Override
public void connectionClosed() {
Log.d("connected","yes connectionClosed successfully : ");
}

@Override
public void connectionClosedOnError(Exception e) {

Log.d("connected","yes connectionClosedOnError : ");
connectionMessages="connectionClosedOnError";
publishProgress();

}

@Override
public void reconnectionSuccessful() {
Log.d("connected","yes reconnection successfully : ");
}

@Override
public void reconnectingIn(int seconds) {
Log.d("connected","yes reconnectingIn : ");
}

@Override
public void reconnectionFailed(Exception e) {
Log.d("connected","yes reconnectionFailed : ");
}
});

connect();
chat();





return null;
}



@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
if (connectionMessages=="connectionClosedOnError")
{
connect();
}
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.d("","onPostExecute");
}

private void connect()
{

try {
connection.connect();
connection.login();
Log.d(""," user id :: " + connection.getUser());

} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XMPPException e) {
e.printStackTrace();
}


}
private void chat()
{

ChatManager chatmanager = ChatManager.getInstanceFor(connection);
Chat newChat = chatmanager.createChat("192.168.1.6" ,new ChatMessageListener() {
@Override
public void processMessage(Chat chat, Message message) {

Log.d("","message :"+ message.getBody());
}
});
try
{

Message newMessage = new Message();
newMessage.setBody("Howdy!");
newMessage.setFrom("ehsan@192.168.1.6/Smack");
newMessage.setTo("ehsan@192.168.1.6/Smack");
newChat.sendMessage(newMessage);



}
catch (SmackException.NotConnectedException e)
{
e.printStackTrace();
}

chatmanager.addChatListener(
new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean createdLocally)
{
if (!createdLocally)
chat.addMessageListener(new ChatMessageListener() {
@Override
public void processMessage(Chat chat, Message message) {
Log.d("","message :"+ message.getBody());
}
});;
}
});

}

}

}

这是日志猫:

02-20 06:45:13.334    1188-1188/passargad.ehsan I/dalvikvm﹕ Could not find method android.view.ViewGroup.onInitializeAccessibilityEvent, referenced from method android.support.v7.widget.LinearLayoutCompat.onInitializeAccessibilityEvent02-20 06:45:13.334    1188-1188/passargad.ehsan W/dalvikvm﹕ VFY: unable to resolve virtual method 13351: Landroid/view/ViewGroup;.onInitializeAccessibilityEvent (Landroid/view/accessibility/AccessibilityEvent;)V02-20 06:45:13.334    1188-1188/passargad.ehsan D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x000602-20 06:45:13.334    1188-1188/passargad.ehsan D/dalvikvm﹕ VFY: dead code 0x0009-0011 in Landroid/support/v7/widget/LinearLayoutCompat;.onInitializeAccessibilityEvent (Landroid/view/accessibility/AccessibilityEvent;)V02-20 06:45:13.344    1188-1188/passargad.ehsan W/dalvikvm﹕ VFY: unable to find class referenced in signature (Landroid/view/accessibility/AccessibilityNodeInfo;)02-20 06:45:13.344    1188-1188/passargad.ehsan I/dalvikvm﹕ Could not find method android.view.ViewGroup.onInitializeAccessibilityNodeInfo, referenced from method android.support.v7.widget.LinearLayoutCompat.onInitializeAccessibilityNodeInfo02-20 06:45:13.344    1188-1188/passargad.ehsan W/dalvikvm﹕ VFY: unable to resolve virtual method 13352: Landroid/view/ViewGroup;.onInitializeAccessibilityNodeInfo (Landroid/view/accessibility/AccessibilityNodeInfo;)V02-20 06:45:13.344    1188-1188/passargad.ehsan D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x000602-20 06:45:13.344    1188-1188/passargad.ehsan D/dalvikvm﹕ VFY: dead code 0x0009-0011 in Landroid/support/v7/widget/LinearLayoutCompat;.onInitializeAccessibilityNodeInfo (Landroid/view/accessibility/AccessibilityNodeInfo;)V02-20 06:45:13.374    1188-1188/passargad.ehsan I/KeyCharacterMap﹕ No keyboard for id -102-20 06:45:13.374    1188-1188/passargad.ehsan I/KeyCharacterMap﹕ Using default keymap: /system/usr/keychars/qwerty.kcm.bin02-20 06:45:13.504    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 206K, 46% free 3077K/5639K, external 0K/0K, paused 5ms+11ms02-20 06:45:16.858    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 263K, 44% free 3317K/5895K, external 0K/0K, paused 5ms+6ms02-20 06:45:17.088    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 252K, 43% free 3485K/6087K, external 0K/0K, paused 5ms+6ms02-20 06:45:17.208    1188-1199/passargad.ehsan I/dalvikvm﹕ Could not find method java.lang.Throwable.addSuppressed, referenced from method de.measite.minidns.Client.query02-20 06:45:17.208    1188-1199/passargad.ehsan W/dalvikvm﹕ VFY: unable to resolve virtual method 14707: Ljava/lang/Throwable;.addSuppressed (Ljava/lang/Throwable;)V02-20 06:45:17.208    1188-1199/passargad.ehsan D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x006f02-20 06:45:17.208    1188-1199/passargad.ehsan I/dalvikvm﹕ Could not find method java.lang.Throwable.addSuppressed, referenced from method de.measite.minidns.Client.query02-20 06:45:17.208    1188-1199/passargad.ehsan W/dalvikvm﹕ VFY: unable to resolve virtual method 14707: Ljava/lang/Throwable;.addSuppressed (Ljava/lang/Throwable;)V02-20 06:45:17.218    1188-1199/passargad.ehsan D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x009d02-20 06:45:17.218    1188-1199/passargad.ehsan I/dalvikvm﹕ Could not find method java.lang.Throwable.addSuppressed, referenced from method de.measite.minidns.Client.query02-20 06:45:17.218    1188-1199/passargad.ehsan W/dalvikvm﹕ VFY: unable to resolve virtual method 14707: Ljava/lang/Throwable;.addSuppressed (Ljava/lang/Throwable;)V02-20 06:45:17.218    1188-1199/passargad.ehsan D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x00b402-20 06:45:17.218    1188-1199/passargad.ehsan D/dalvikvm﹕ VFY: dead code 0x0072-0072 in Lde/measite/minidns/Client;.query (Lde/measite/minidns/Question;Ljava/lang/String;I)Lde/measite/minidns/DNSMessage;02-20 06:45:17.218    1188-1199/passargad.ehsan D/dalvikvm﹕ VFY: dead code 0x00a0-00a0 in Lde/measite/minidns/Client;.query (Lde/measite/minidns/Question;Ljava/lang/String;I)Lde/measite/minidns/DNSMessage;02-20 06:45:17.218    1188-1199/passargad.ehsan D/dalvikvm﹕ VFY: dead code 0x00b7-00b7 in Lde/measite/minidns/Client;.query (Lde/measite/minidns/Question;Ljava/lang/String;I)Lde/measite/minidns/DNSMessage;02-20 06:45:17.428    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 273K, 42% free 3647K/6279K, external 0K/0K, paused 4ms+6ms02-20 06:45:17.688    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 403K, 44% free 3652K/6407K, external 0K/0K, paused 5ms+5ms02-20 06:45:17.979    1188-1199/passargad.ehsan D/connected﹕ yes connected successfully :02-20 06:45:18.519    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 323K, 42% free 3739K/6407K, external 0K/0K, paused 5ms+6ms02-20 06:45:18.669    1188-1193/passargad.ehsan I/dalvikvm﹕ Jit: resizing JitTable from 512 to 102402-20 06:45:18.779    1188-1193/passargad.ehsan D/dalvikvm﹕ null clazz in OP_INSTANCE_OF, single-stepping02-20 06:45:19.460    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 479K, 43% free 3737K/6535K, external 0K/0K, paused 5ms+6ms02-20 06:45:20.221    1188-1190/passargad.ehsan D/dalvikvm﹕ GC_CONCURRENT freed 486K, 43% free 3742K/6535K, external 0K/0K, paused 5ms+6ms02-20 06:45:20.371    1188-1199/passargad.ehsan D/connected﹕ yes authenticated successfully :02-20 06:45:20.391    1188-1199/passargad.ehsan D/﹕ user id  ::   ehsan@passargad-pc/Smack02-20 06:45:20.411    1188-1188/passargad.ehsan D/﹕ onPostExecute

提前谢谢您!

最佳答案

快速浏览一下代码,发现了一些错误:

  1. createChat 期望第一个参数是 userJid(不是主机 IP)

    Chat newChat = chatmanager.createChat("ehsan@<service name>" ,new ChatMessageListener() {
    @Override
    public void processMessage(Chat chat, Message message) {
    Log.d("","message :"+ message.getBody());
    }
    });
  2. 启用调试并检查日志

    connection = new XMPPTCPConnection(
    XMPPTCPConnectionConfiguration.builder()
    .setServiceName("192.168.1.6")
    .setUsernameAndPassword("ehsan", "123")
    .setPort(9090)
    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
    .setCompressionEnabled(false)
    .setDebuggerEnabled(true)
    .build());
  3. 将端口从 9090 更改为 5222(如果您没有更改默认配置;请检查 openfire 管理面板)

  4. 首选使用 addAsyncStanzaListener 监听传入数据包。

关于java - XMPP Smack 无法接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com