Java 线程nullpointerException QuickBlox“;muc+;“聊天室”;
我对API QUICKBLOX有一个问题,当我输入“MUC”时,我跳转到一个非常奇怪的错误,我不知道为什么Java 线程nullpointerException QuickBlox“;muc+;“聊天室”;,java,multithreading,chat,Java,Multithreading,Chat,我对API QUICKBLOX有一个问题,当我输入“MUC”时,我跳转到一个非常奇怪的错误,我不知道为什么 public class MyChatController { // ================= QuickBlox ===== Step 8 ================= // Get QuickBlox chat server domain. // There will be created connection with chat server below. publ
public class MyChatController {
// ================= QuickBlox ===== Step 8 =================
// Get QuickBlox chat server domain.
// There will be created connection with chat server below.
public static final String CHAT_SERVER = QBChat.getChatServerDomain();
private XMPPConnection connection;
private ConnectionConfiguration config;
private Chat chat;
// Multi-User Chat, también conocido como
// MUC, es un robusto protocolo de conferencia basado en XMP.
// Fue desarrollado como un sistema de chat en grupo para extender
// la funcionalidad de clientes Jabber/XMPP, cuyo protocolo sólo permite
// establecer conferencias entre 2 personas. Ha sido acogido como propuesta
// de extensión XEP-0045, y se ha incluido de forma nativa en el programa servidor ejabberd.
private MultiUserChat muc2;
private String chatLogin;
private String password;
private String friendLogin;
private ChatManager chatManager;
public MyChatController(String chatLogin, String password) {
this.chatLogin = chatLogin;
this.password = password;
}
public void startChat(String buddyLogin) {
this.friendLogin = buddyLogin;
new Thread(new Runnable() {
@Override
public void run() {
// Chat action 1 -- create connection.
Connection.DEBUG_ENABLED = true;
config = new ConnectionConfiguration(CHAT_SERVER);
connection = new XMPPConnection(config);
try {
connection.connect();
connection.login(chatLogin, password);
// Chat action 2 -- create chat manager.
chatManager = connection.getChatManager();
// Chat action 3 -- create chat.
chat = chatManager.createChat(friendLogin, messageListener);
// Set listener for outcoming messages.
chatManager.addChatListener(chatManagerListener);
// Muc 2
muc2 = new MultiUserChat(connection, "2387_chat1@muc.chat.quickblox.com");
// Discover whether user3@host.org supports MUC or not
// The room service will decide the amount of history to send
muc2.join(chatLogin);
muc2.invite(friendLogin, "Welcome!");
Log.d("friendLogin ->",friendLogin);
// Set listener for outcoming messages.
//chatManager.addChatListener(chatManagerListener);
muc2.addMessageListener(packetListener);
addListenerToMuc(muc2);
//chat1@muc.chat.quickblox.com --- el meu
Message message = new Message(friendLogin + "@muc.chat.quickblox.com");
message.setBody("Join me for a group chat!");
message.addExtension(new GroupChatInvitation("2387_chat1@muc.chat.quickblox.com"));
connection.sendPacket(message);
} catch (XMPPException e) {
e.printStackTrace();
}
}
}).start();
}
/*** muc */
private void addListenerToMuc(MultiUserChat muc){
if(null != muc){
muc.addMessageListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
Log.i("processPacket", "receiving message");
}
});
}
}
PacketListener packetListener = new PacketListener() {
@Override
public void processPacket(Packet packet) {
Message message = (Message)packet;
try {
muc2.sendMessage(message);
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("got message " + message.toXML());
}
};
private PacketInterceptor packetInterceptor = new PacketInterceptor() {
@Override
public void interceptPacket(Packet packet) {
System.out.println("Sending message: " + packet.toString());
Message message = muc2.createMessage();
message.setBody("Hello from producer, message " +
" ");
try {
muc2.sendMessage(message);
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
/***/
错误:
05-20 23:16:19.679: E/AndroidRuntime(3361): FATAL EXCEPTION: Thread-277
05-20 23:16:19.679: E/AndroidRuntime(3361): java.lang.NullPointerException
05-20 23:16:19.679: E/AndroidRuntime(3361): at org.jivesoftware.smackx.muc.MultiUserChat$1.connectionCreated(MultiUserChat.java:114)
05-20 23:16:19.679: E/AndroidRuntime(3361): at org.jivesoftware.smack.XMPPConnection.initConnection(XMPPConnection.java:607)
05-20 23:16:19.679: E/AndroidRuntime(3361): at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:556)
05-20 23:16:19.679: E/AndroidRuntime(3361): at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:984)
05-20 23:16:19.679: E/AndroidRuntime(3361): at com.quickblox.sample.chat.MyChatController$5.run(MyChatController.java:73)
05-20 23:16:19.679: E/AndroidRuntime(3361): at java.lang.Thread.run(Thread.java:856)
05-20 23:16:19.807: E/Trace(3445): error opening trace file: No such file or directory (2)
看起来你的Smack配置没有正确初始化。这是一个已知问题,已报告并解释。您的Smack配置似乎未正确初始化。这是一个已知问题,已报告并解释。Dropbox示例:但抛出ThreadNullPointerException或错误XML 这是错误XML: 如果我使用其他android smack-x,我会得到:
05-21 18:16:17.409: E/AndroidRuntime(2352): FATAL EXCEPTION: main
05-21 18:16:17.409: E/AndroidRuntime(2352): java.lang.VerifyError: com/quickblox/sample/chat/MyChatController
05-21 18:16:17.409: E/AndroidRuntime(2352): at com.quickblox.sample.chat.ChatActivity.onCreate(ChatActivity.java:81)
现在有错误:
05-21 23:30:32.075: W/System.err(2579): java.lang.NullPointerException
05-21 23:30:32.075: W/System.err(2579): at org.jivesoftware.smackx.muc.MultiUserChat$1.connectionCreated(MultiUserChat.java:115)
问题出在这里,但我不知道以下代码:
已解决。Dropbox示例:但抛出ThreadNullPointerException或错误XML
这是错误XML:
如果我使用其他android smack-x,我会得到:
05-21 18:16:17.409: E/AndroidRuntime(2352): FATAL EXCEPTION: main
05-21 18:16:17.409: E/AndroidRuntime(2352): java.lang.VerifyError: com/quickblox/sample/chat/MyChatController
05-21 18:16:17.409: E/AndroidRuntime(2352): at com.quickblox.sample.chat.ChatActivity.onCreate(ChatActivity.java:81)
现在有错误:
05-21 23:30:32.075: W/System.err(2579): java.lang.NullPointerException
05-21 23:30:32.075: W/System.err(2579): at org.jivesoftware.smackx.muc.MultiUserChat$1.connectionCreated(MultiUserChat.java:115)
问题出在这里,但我不知道以下代码:
已解决。您的堆栈跟踪显示com.quickblox.sample.chat.MyChatController$5.run(MyChatController.java:73)。哪一条是73号线?这将告诉您错误发生的位置,并为您提供一条关于此处的
null
的重要线索;工作正常,但当我重新进入与用户对话后离开活动,我跳过了nullpointer。您的堆栈跟踪显示com.quickblox.sample.chat.MyChatController$5.run(MyChatController.java:73)。哪一条是73号线?这将告诉您错误发生的位置,并为您提供一条关于此处的null
的重要线索;工作正常,但当我重新进入与用户对话后离开活动时,我跳过了nullpointer。我明白了,但是android-smack7,quickBlox附带了api,很难更改某些内容。我不知道该怎么办。在创建连接之前,您是否尝试初始化配置(SmackConfiguration.getVersion();
)?没有“MUC”作为访问quickblox room的权限,如果可以的话,可以使用“MUC”。MUC还有其他选择吗?或阿尔古纳·马内拉房间的可变“聊天室”:教授,我不懂西班牙语。您是否尝试过将SmackConfiguration.getVersion()放入;按照这里的建议调用您的类:?我明白了,但是android-smack7、quickBlox随api提供,很难更改某些内容。我不知道该怎么办。在创建连接之前,您是否尝试初始化配置(SmackConfiguration.getVersion();
)?没有“MUC”作为访问quickblox room的权限,如果可以的话,可以使用“MUC”。MUC还有其他选择吗?或阿尔古纳·马内拉房间的可变“聊天室”:教授,我不懂西班牙语。您是否尝试过将SmackConfiguration.getVersion()放入;按照这里的建议给你的班级打电话:?