[英]java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/naming/directory/InitialDirContext;
我正在嘗試使用Android工作室中的Smack庫使用XMPP協議構建聊天應用程序。 通過使用Smack 3.1.0版本,我可以輕松連接到開放式服務器,甚至我向用戶發送了一條由spark登錄的消息。 但是我永遠無法收到來自該用戶的消息,因為MessageListener的processMessage在編譯時只運行了一次。 因為我無法得到最喜歡的結果,我通過互聯網搜索並發現從版本4.1或上層剛剛支持android。
所以我嘗試使用smack 4.1.4構建我的應用程序並解決許多錯誤。 但是一個錯誤沒有解決,我在互聯網上找不到它。 就是這樣(當然有太多的錯誤,但我帶來了前4名):
11-10 00:16:03.446 15512-15539/xmppconnectiontest2.ffisher.com.xmpp2 E/AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/naming/directory/InitialDirContext;
11-10 00:41:36.169 19859-19886/xmppconnectiontest2.ffisher.com.xmpp2 E/AndroidRuntime: at org.jivesoftware.smack.util.dns.javax.JavaxResolver.<clinit>(JavaxResolver.java:50)
11-10 00:41:36.169 19859-19886/xmppconnectiontest2.ffisher.com.xmpp2 E/AndroidRuntime: at java.lang.Class.classForName(Native Method)
11-10 00:41:36.169 19859-19886/xmppconnectiontest2.ffisher.com.xmpp2 E/AndroidRuntime: at java.lang.Class.forName(Class.java:308)
正如igniterealtime的文件說我添加了所有必要的庫。 這是我在Gradle中的依賴:
compile 'org.igniterealtime.smack:smack-core:4.1.4'
compile 'org.igniterealtime.smack:smack-tcp:4.1.4'
compile 'org.igniterealtime.smack:smack-extensions:4.1.4'
compile 'org.igniterealtime.smack:smack-resolver-javax:4.1.4'
compile 'org.igniterealtime.smack:smack-bosh:4.1.4'
compile 'org.igniterealtime.smack:smack-resolver-dnsjava:4.1.4'
compile 'org.igniterealtime.smack:smack-legacy:4.1.4'
compile 'org.igniterealtime.smack:smack-experimental:4.1.4'
compile 'org.igniterealtime.smack:smack-jingle-old:4.1.4'
compile 'org.igniterealtime.smack:smack-debug:4.1.4'
關於創建的主要活動:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
String [] param = {"mhs", "10.0.2.2"};
Asynchron asynchron = (Asynchron) new Asynchron();
asynchron.doInBackground(param);
}
});
t.start();
我使用的AsyncTask的子類:
public class Asynchron extends AsyncTask <String, Void, Void>
{
@Override
protected Void doInBackground(String... params) {
XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
builder.setServiceName(params[0]);
builder.setHost(params[1]);
builder.setPort(5222);
builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
builder.setDebuggerEnabled(true);
builder.setCompressionEnabled(true);
connection = new XMPPTCPConnection(builder.build());
SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
try {
connection.connect();
connection.login("testUser1", "1234");
} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XMPPException e) {
e.printStackTrace();
}
return null;
}
}
我真的需要你的幫助。 如何解決我在問題標題中寫的錯誤?
只需使用:
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
compile "org.igniterealtime.smack:smack-experimental:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
並刪除builder.setCompressionEnabled(true);
刪除依賴項中的smack-resolver-javax。 可能那個jar正在覆蓋一些遺留類
只需使用smack-tcp
, smack-experimental
和smack-android-extensions
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.