2016-08-12 1 views
2

Android 프로그래밍에서 새로운 점은 약 2 개월입니다. 여기에 게시하기 전에 해결책을 찾아내려고 꽤 많은 시간을 보냈습니다. 그래서 나는 질문에 곧바로 갈 것이고, 그 후에 나는 나를 위해 일하지 않은 것을 설명 할 것이다. 다음과 같이Android Studio에서 Smack를 사용하여 Openfire XMPP 서버로 네트워크에 연결하는 방법

문제는 (이 제목에 따라입니다)입니다 :

가 어떻게의 Openfire XMPP 서버 4.0.2로 네트워크에 안드로이드 스튜디오 2.1.2과 헤로인 4.1.5을 사용합니까? 이상적으로는 짧고 뼈없는 코드가 로그온하여 채팅을 보내고받는 것이 좋습니다. 그렇지 않으면 강력한 포인터가 가장 환영받을 것입니다. (라이브러리를 생략 했습니까? try-n-catch에 문제가 있습니까?)

MainActivity.java 파일은 다음과 같습니다 (문제를 확대하기 위해 마지막으로 코드를 주석 처리했습니다 코드. 내가 말할 수있는 최선의 문제는 주석이 시작되기 직전의 줄에있다. (/ *) 그러나이 줄은 Smack 문서에서 권장하는 줄과 거의 동일하기 때문에 이상하다. 도와 주셔서 감사합니다. "미리 감사드립니다."

(내 의견으로는 Openfire XMPP 서버를 설치하고 PC에서 실행 중이며 Openfire XMPP 서버에서도 스파크 테스트를 거쳤습니다. 보내고받은 채팅은 괜찮습니다.) :

나는 모든 적절한 라이브러리 (또는 적어도 내가 생각)을 가져올 수있는 응용 프로그램 build.gradle을 설정 한

08-06 08:08:46.405 18663-18663/com.eg.an_smackandchatclc E/MainActivity.java: onCreate 
08-06 08:08:46.539 18663-18663/com.eg.an_smackandchatclc E/MainActivity.java: setContentView 

08-06 08:08:46.672 18663-18663/com.eg.an_smackandchatclc E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.eg.an_smackandchatclc, PID: 18663 
                     java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/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:400) 
                      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:97) 
                      at com.eg.an_smackandchatclc.MainActivity.onCreate(MainActivity.java:62) 
                      at android.app.Activity.performCreate(Activity.java:6658) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2584) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2692) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1445) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6044) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
08-06 08:08:46.672 18663-18663/com.eg.an_smackandchatclc E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.naming.directory.InitialDirContext" on path: DexPathList[[dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-support-annotations-24.0.0_87b336946543c1f787a3f9b83be41366f9cdbb84-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-tcp-4.1.5_b0d53c1047a32e900a08ccf219813c5bc2e618c2-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-sasl-provided-4.1.5_084129969859dd9e8f37122e5ef57f0cfd22a46c-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-sasl-javax-4.1.0_0ab65da887f48d8d5e384912160eaa1e0908d186-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-resolver-minidns-4.1.5_0ae177b49eafb38d7b12353d2eda6cc149b4fe43-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-resolver-javax-4.1.0_d306adbf26933e7f728102e3672f3f90637ba1f4-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-java7-4.1.0_dcb0e760478344b0ca249594ceb7373304752bae-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-im-4.1.5_1ecc996e048dc5efba3acddae625e28aedfd704e-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-extensions-4.1.5_4eacc0e2ea2f430835f5aa7fef27c8a657ed75b2-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-core-4.1.5_21299a3731f708b27e7f5f12a5bc6ebf265c7a80-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-android-extensions-4.1.5_ce6630a8dabc9b47414ad59ad934c206078b768c-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-smack-android-4.1.5_d8cd382b84de7e021e8ac21a53fd3e9213386ed4-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-minidns-0.1.7_4e64c8580258e0c1f1f12d1e7412dad623952782-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-jxmpp-util-cache-0.4.2_108c360a78086927507dd4d9b7a2ad0580db469b-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-jxmpp-core-0.4.2_ee26bb5026023b646554c0bf9ba14c39ffd9a0f5-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-internal_impl-24.0.0_f8e857843a2f013dbed9c33184b5eae71c5fa909-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-com.android.support-support-vector-drawable-24.0.0_c612cdcfcff025f7f2ab5366116677fa236ef2b7-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-com.android.support-support-v4-24.0.0_cdc3a4409b42b56d3a7c52c568071a86579f9e63-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-com.android.support-appcompat-v7-24.0.0_50c6a3f385fbb5da5a5fbefc3749fa4 
08-06 08:08:46.672 18663-18663/com.eg.an_smackandchatclc E/AndroidRuntime: abfcd41b4-classes.dex", dex file "/data/data/com.eg.an_smackandchatclc/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-24.0.0_5eae71faeeb4e4b2f9cdde61d342e39a2cdcfcb5-classes.dex"],nativeLibraryDirectories=[/data/app/com.eg.an_smackandchatclc-2/lib/x86_64, /system/lib64, /vendor/lib64]] 
                      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
                      at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90) 
                      at java.lang.ClassLoader.loadClass(ClassLoader.java:380) 
                      at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 
                      ... 23 more 

다음과 같이 080,063,210

로그 캣 (에러 메시지 만)입니다. 여기에는 다음이 포함됩니다.

<Android API 24 Platform> 
<1.8> 
android-android-24 
animated-vector-drawable-24.0.0 
appcompat-v7-24.0.0 
hamcrest-core-1.3 
junit-4.12 
jxmpp-core-0.4.2 
jxmpp-util-cache-0.4.2 
minidns-0.1.7 
smack-android-4.1.5 
smack-android-extensions-4.1.5 
smack-core-4.1.5 
smack-extensions-4.1.5 
smack-im-4.1.5 
smack-java7-4.1.0 
smack-resolver-javax-4.1.0 
smack-resolver-minidns-4.1.5 
smack-sasl-javax-4.1.0 
smack-sasl-provided-4.1.5 
smack-tcp-4.1.5 
support-annotations-24.0.0 
support-v4-24.0.0 
support-vector-drawable-24.0.0 

위의 내용은 질문과 관련된 기본 정보입니다.

다음은이 질문을 게시하기 전에 내가 시도한 "숙제"입니다.

나는 스맥 문서 (http://download.igniterealtime.org/smack/docs/latest/documentation/)의 모든 단어를 흘 렸습니다. 처음에, 나는 "코드의 몇 줄의"를 사용하여 시도 문서에 제안 :

```java AbstractXMPPConnection connection = new XMPPTCPConnection("mtucker", "password", "jabber.org"); 
connection.connect().login(); 
Chat chat = ChatManager.getInstanceFor(connection) .createChat("[email protected]", new MessageListener() { 
public void processMessage(Chat chat, Message message) { 
System.out.println("Received message: " + message); 
} 
}); 
chat.sendMessage("Howdy!"); ``` 

(http://download.igniterealtime.org/smack/docs/latest/documentation/overview.html)

불행하게도, 아니 기쁨 전혀.

그런 다음 한 줄을 테스트 해 보았습니다. (Ha-ha-ha. Stack Overflow는 내가 인용하고 싶었던 코드가 스팸처럼 보일 것이라고 말합니다. 이제 이것을 더 이상 웃지 않습니다. 이전 문장은 스팸을 쳐다 보았습니다.이 두 문장을 통해이 게시물을받을 수 있는지 보도록하겠습니다.) (Ha-ha. Stack Overflow는 2 개 이상의 링크를 게시하려면 10 개 이상의 평판이 필요하다고 말합니다. 어쨌든, 나는 Smack 문서의 "Getting Started"페이지에서 한 줄의 코드를 얻었습니다.)

여전히, 헛된 것입니다.

나를 믿어 라. 스택 오버플로의 다른 곳을 포함하여 그물에 제안 된 다른 모든 솔루션을 시도했지만 모두 실패했습니다. 매번 오류 메시지 또는 기타 오류가 발생할 수 있습니다. 또는 주어진 코드 샘플은 필자가 작성해야하는 것보다 더 많은 코딩 컷을 필요로합니다.예를 들어, 코드 샘플은 정의되지 않은 메소드 나 자체적으로 작성해야하는 클래스를 참조 할 수 있습니다.

그래서 다시 한번이 문제에 대한 도움에 감사드립니다.

+0

난 당신이 필요가없는 많은 것들을 가져 생각 의존성 – babadaba

+0

에서 헤로인-해결-javax의-4.1.0을 제거,이 컴파일 'org.igniterealtime.smack 시도 : 헤로인 - 안드로이드 : 4.1 .6 ' 'org.igniterealtime.smack : smack-tcp : 4.1.6 ' compile "org.igniterealtime.smack : smack-extensions : 4.1.6" 컴파일 "org.igniterealtime.smack : smack-im : 4.1.6 " –

답변

0

사용 안드로이드 라이브러리

  • org.igniterealtime.smack : 헤로인 - 안드로이드 : 4.1.6
  • org.igniterealtime.smack : 헤로인-TCP : 4.1.6
  • org.igniterealtime.smack : smack-im : 4.1.6

이러한 라이브러리로 시작하기에 충분합니다. 모든 자바 라이브러리는 안드로이드, 특히 javax 패키지와 호환되지 않습니다.

0

Smack 4.1.x (InitialDirContext에서 NoClassDefFoundError)와 동일한 문제가 발생했습니다.

시도 build.gradle에, 헤로인 4.2 사용 :

compile "org.igniterealtime.smack:smack-android-extensions:4.2.0-alpha3" 
    compile "org.igniterealtime.smack:smack-tcp:4.2.0-alpha3" 

그리고 이것이 내가 연결을 초기화하는 방법입니다.

private void initializeConnection() { 
    try { 
     XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() 
       .setHost(mServerAddress) 
       .setPort(mServerPort) 
       .setXmppDomain(JidCreate.domainBareFrom(mServiceName)) 
       .setUsernameAndPassword(mUserLogin, mUserPassword) 
       .build(); 

     mXmppTcpConnection = new XMPPTCPConnection(config); 

     XmppConnectionListener connectionListener = new XmppConnectionListener(); 
     mXmppTcpConnection.addConnectionListener(connectionListener); 
    } catch (XmppStringprepException e) { 
     e.printStackTrace(); 
    } 
} 
관련 문제