2015-05-19 2 views
2

Я пытаюсь использовать Smack для моего проекта. Я ранее использовал aSmack в некоторых из моих предыдущих проектов, которые работали очень хорошо. Однако Смак дает мне странные исключения.Исключение инициализации «NoClassDefFoundError: javax.naming.directory.InitialDirContext» при использовании Smack 4.1 на Android

Вот мой код инициализации выглядит -

public void init(String username, String password) throws IOException, XMPPException, SmackException { 
     mConnection = new XMPPTCPConnection(username, password, HOST_NAME); //This is the line which generates the exception 

     mConnection.connect(); 
     mConnection.login(); 

     mChatManager = ChatManager.getInstanceFor(mConnection); 
     mChatManager.addChatListener(this); 
    } 

Вот вывод Logcat -

java.lang.IllegalStateException: Could not execute method of the activity 
      at android.view.View$1.onClick(View.java:3690) 
      at android.view.View.performClick(View.java:4192) 
      at android.view.View$PerformClick.run(View.java:17248) 
      at android.os.Handler.handleCallback(Handler.java:615) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4950) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.reflect.InvocationTargetException 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at android.view.View$1.onClick(View.java:3685) 
            at android.view.View.performClick(View.java:4192) 
            at android.view.View$PerformClick.run(View.java:17248) 
            at android.os.Handler.handleCallback(Handler.java:615) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4950) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ExceptionInInitializerError 
      at test.Managers.XMPPManager.init(XMPPManager.java:42) 
      at test.LoginActivity.onLoginClick(LoginActivity.java:46) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at android.view.View$1.onClick(View.java:3685) 
            at android.view.View.performClick(View.java:4192) 
            at android.view.View$PerformClick.run(View.java:17248) 
            at android.os.Handler.handleCallback(Handler.java:615) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4950) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ExceptionInInitializerError 
      at org.jivesoftware.smack.SmackConfiguration.getVersion(SmackConfiguration.java:96) 
      at org.jivesoftware.smack.AbstractXMPPConnection.<clinit>(AbstractXMPPConnection.java:98) 
            at test.Managers.XMPPManager.init(XMPPManager.java:42) 
            at test.LoginActivity.onLoginClick(LoginActivity.java:46) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at android.view.View$1.onClick(View.java:3685) 
            at android.view.View.performClick(View.java:4192) 
            at android.view.View$PerformClick.run(View.java:17248) 
            at android.os.Handler.handleCallback(Handler.java:615) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4950) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ExceptionInInitializerError 
      at java.lang.Class.classForName(Native Method) 
      at java.lang.Class.forName(Class.java:217) 
      at org.jivesoftware.smack.SmackInitialization.loadSmackClass(SmackInitialization.java:213) 
      at org.jivesoftware.smack.SmackInitialization.parseClassesToLoad(SmackInitialization.java:193) 
      at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:163) 
      at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:148) 
      at org.jivesoftware.smack.SmackInitialization.<clinit>(SmackInitialization.java:116) 
            at org.jivesoftware.smack.SmackConfiguration.getVersion(SmackConfiguration.java:96) 
            at org.jivesoftware.smack.AbstractXMPPConnection.<clinit>(AbstractXMPPConnection.java:98) 
            at test.Managers.XMPPManager.init(XMPPManager.java:42) 
            at test.LoginActivity.onLoginClick(LoginActivity.java:46) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at android.view.View$1.onClick(View.java:3685) 
            at android.view.View.performClick(View.java:4192) 
            at android.view.View$PerformClick.run(View.java:17248) 
            at android.os.Handler.handleCallback(Handler.java:615) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4950) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NoClassDefFoundError: javax.naming.directory.InitialDirContext 
      at org.jivesoftware.smack.util.dns.javax.JavaxResolver.<clinit>(JavaxResolver.java:50) 
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:217) 
            at org.jivesoftware.smack.SmackInitialization.loadSmackClass(SmackInitialization.java:213) 
            at org.jivesoftware.smack.SmackInitialization.parseClassesToLoad(SmackInitialization.java:193) 
            at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:163) 
            at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:148) 
            at org.jivesoftware.smack.SmackInitialization.<clinit>(SmackInitialization.java:116) 
            at org.jivesoftware.smack.SmackConfiguration.getVersion(SmackConfiguration.java:96) 
            at org.jivesoftware.smack.AbstractXMPPConnection.<clinit>(AbstractXMPPConnection.java:98) 
            at test.Managers.XMPPManager.init(XMPPManager.java:42) 
            at test.LoginActivity.onLoginClick(LoginActivity.java:46) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at android.view.View$1.onClick(View.java:3685) 
            at android.view.View.performClick(View.java:4192) 
            at android.view.View$PerformClick.run(View.java:17248) 
            at android.os.Handler.handleCallback(Handler.java:615) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4950) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
            at dalvik.system.NativeStart.main(Native Method) 

Я проверил некоторые посты на форуме, который говорит, что эта проблема возникает, когда ProGuard включена. Однако в моем проекте Progaurd отключен.

Любая идея, что может вызвать это исключение?

Обновление: -
Это как мой app.gradle файл выглядит следующим образом -

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'org.igniterealtime.smack:smack-java7:4.1.0' 
    // Optional for XMPPTCPConnection 
    compile 'org.igniterealtime.smack:smack-tcp:4.1.0' 
    // Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …) 
    compile 'org.igniterealtime.smack:smack-im:4.1.0' 
    // Optional for XMPP extensions support 
    compile 'org.igniterealtime.smack:smack-extensions:4.1.0' 
    compile 'com.android.support:appcompat-v7:21.0.3' 
    compile project(':xxx') 
    compile project(':xxx') 
    compile project(':xxx') 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
} 
+0

Вы читали «Чтение Смака»? Как вы добавили Smack в свой проект? – Flow

+0

@Flow Спасибо за ответ. Я использовал Gradle для добавления зависимостей. Пожалуйста, проверьте часть обновления в вопросе, чтобы узнать, что я добавил. – noob

+0

И я прочитал часть документации. Код берется из раздела «Начало работы». – noob

ответ

7

Не добавлять привкус-java7 на Android проектах, использовать привкус-андроид вместо этого.

Также Smack 4.2.0 - последняя версия Smack.

+0

Теперь я чувствую себя глупо, чтобы игнорировать эту деталь. Спасибо за помощь. Это сработало. – noob

Смежные вопросы