2016-08-12 22 views
2

私はAndroidプログラミング時に約2ヶ月です。 私はここに投稿する前に解決策を見つけようとかなりの時間を費やしました。 私は質問に直進し、その後、私のために働いていなかったことを説明します。AndroidスタジオでSmackを使ってOpenfire XMPPサーバーとネットワークを組む方法

次のように質問(それはタイトルの通りである)である:

私はOpenfire XMPPサーバー4.0.2でネットワークにAndroidのメーカー2.1.2と4.1.5スマック使うにはどうすればよいですか?理想的には、ログオンしてチャットを送受信する短くて裸のコードです。さもなければ、強いポインタが大歓迎です。 (ライブラリを省略しましたか?try-n-catchに何か問題がありますか?)

MainActivity.javaファイルは次のとおりです。問題の拡大には最後のコードをコメントアウトしましたコードは、コメントの開始直前(/ *)に問題がありますが、この行はSmackのドキュメントで推奨されているものと事実上同じですが、これは奇妙です。助けて、私にここで言ってみましょう: "ありがとう事前に")

(私のPCでOpenfire XMPPサーバーを起動して稼働させました)また、Openfire XMPPサーバーでスパークをテストしました。チャットは大丈夫です):

次のように

Logcat(エラーメッセージのみ)は、次のとおりです。

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 

私は(私が持っていると思う、少なくともまたは)すべての適切なライブラリをインポートするアプリのbuild.gradleを設定しています。それらは以下を含みます:

<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 

上記は質問に関する基本的な情報です。

以下は、この質問を投稿する前にやってみた "宿題"でした。

私はSmackの文書(http://download.igniterealtime.org/smack/docs/latest/documentation/)のすべての言葉を読みました。残念ながら

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

、まったく喜びを: は当初、私は "数行のコードは、" ドキュメントで推奨使用してみました。

次に、私はその行をテストすることにしました: (Ha-ha-ha。Stack Overflowは、私が引用したかったコードがスパムのように見えるので、これを置いています。前の文が迷惑メールを見ていたので、この2つの文が私にこの投稿を受け取ることができるかどうかを見てみましょう) (Ha-ha。Stack Overflowは2以上のリンクを投稿するには少なくとも10の評判が必要だと言うので、とにかく、私はSmackのドキュメンテーションの "Getting Started"ページから1行のコードを受け取りました。)

まだ、無駄です。

信頼できます。ネット上で提案されている他のソリューション(Stack Overflowの他の部分も含む)を試しましたが、すべてで失敗しました。毎回、何らかのエラーメッセージまたはその他が発生します。代わりに、与えられたコードサンプルは、私が仕事をしなければならなかったよりも多くのコードチョップを必要とするでしょう。たとえば、コードサンプルは、定義されていないメソッドまたは自分で作成しなければならないクラスを参照することがあります。

もう一度、これについての助けをお寄せいただきありがとうございます。

+0

私はこの コンパイル「org.igniterealtime.smackしてみてください、あなたはあなたが必要といけないたくさんのことを輸入していると思いますあなたの依存関係から – babadaba

+0

をピシャリ-レゾルバのjavax-4.1.0を削除:ピシャリ-アンドロイド:4.1 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

これらのライブラリで十分です。 すべてのJavaライブラリはAndroid、特にjavaxパッケージと互換性がありません。

0

私はSmack 4.1.x(InitialDirContextのNoClassDefFoundError)と同じ問題がありました。

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

そして、これは私が接続を初期化する方法である:

はbuild.gradleに、スマック4.2を使用してみてください。

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(); 
    } 
} 
関連する問題