2016-08-12 75 views
2

我是Android編程的新手,大約兩個月了。 在發佈之前,我花了相當多的時間試圖找出解決方案。所以,我會直接回答這個問題,之後,我會解釋什麼對我沒有幫助。如何使用Smack與Android Studio與Openfire XMPP服務器聯網

的問題如下(這是按標題):

如何使用啪4.1.5與Android 2.1.2工作室網絡與Openfire的XMPP服務器4.0.2?理想情況下,讚賞,登錄和發送和接收聊天簡短,骨頭的代碼片段將不勝感激。否則,強烈的指針將是最受歡迎的。 (我是否遺漏了一個庫?是否有錯誤的try-n-catch?)

MainActivity.java文件如下所示(爲了放大問題,我已經註釋掉了最後一段代碼代碼,最好的我可以告訴,問題出現在註釋開始之前的那一行(/ *),然而,這很奇怪,因爲這一行實際上和Smack文檔建議的一樣,所以我要求幫助,讓我在這裏說:「提前致謝」。)

(因爲我已經得到了一臺Openfire XMPP服務器並運行在我的PC上,我還測試了Openfire XMPP服務器上的火花,發送和接收的聊天沒關係。):

package com.eg.an_smackandchatclc; 
import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import org.jivesoftware.smack.AbstractXMPPConnection; 
import org.jivesoftware.smack.ConnectionConfiguration; 
import org.jivesoftware.smack.MessageListener; 
import org.jivesoftware.smack.SmackConfiguration; 
import org.jivesoftware.smack.SmackException; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.chat.Chat; 
import org.jivesoftware.smack.chat.ChatManager; 
import org.jivesoftware.smack.chat.ChatManagerListener; 
import org.jivesoftware.smack.chat.ChatMessageListener; 
import org.jivesoftware.smack.packet.Message; 
import org.jivesoftware.smack.roster.Roster; 
import org.jivesoftware.smack.roster.RosterEntry; 
import org.jivesoftware.smack.tcp.XMPPTCPConnection; 
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import javax.net.ssl.SSLSocketFactory; 
import java.util.*; 
import java.io.*; 
import org.jivesoftware.smack.*; 
import org.jivesoftware.smack.ConnectionConfiguration; 
import org.jivesoftware.smack.MessageListener; 
import org.jivesoftware.smack.*; 
import org.jivesoftware.smack.*; 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.packet.Message; 
public class MainActivity extends AppCompatActivity { 
//public static final String HOST = "208.68.163.218"; //write your host name 
//public static final int PORT = 5222; 
private static final String TAG = "MainActivity.java"; 
//Log.e(TAG, "declaration"); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    System.out.println("onCreate"); 
    Log.e(TAG, "onCreate"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    System.out.println("onCreate"); 
    Log.e(TAG, "setContentView"); 
    AbstractXMPPConnection conn1 = new XMPPTCPConnection("admin", "admin", "desktop-pc"); 
}} 
/* 
    AbstractXMPPConnection conn1 = new XMPPTCPConnection("username", "password", "jabber.org"); 
    System.out.println("onCreate"); 
    Log.e(TAG, "conn1"); 
}} 
*/ 
/* 
     try { 
     System.out.println("onCreate"); 
     Log.e(TAG, "try"); 
     conn1.connect(); 
    } catch (SmackException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (XMPPException e) { 
     e.printStackTrace(); 
    } 
    connect(); 
    System.out.println("onCreate"); 
    Log.e(TAG, "connect()"); 
} 

的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說我想引用的代碼看起來像垃圾郵件,所以我把它放在原處,現在它不再有趣了,前面的句子看着垃圾郵件到SO,讓我們看看這兩個句子是否允許我通過這篇文章。) (哈哈。堆棧溢出說我需要至少10個聲望發佈超過2個鏈接,所以鏈接我不管怎麼說,我從Smack文檔的「Getting Started」頁面說了一行代碼。)

仍然是徒勞的。

相信我,我嘗試了所有其他解決方案在網絡上建議(包括堆棧溢出其他地方),但我失敗了所有的人。每次都會出現一些錯誤信息或其他信息。或者,給出的代碼樣本將需要比我必須做的更多的編碼排序。例如,代碼示例可能引用了一個沒有定義的方法或者不得不自己創建的類。

所以,再次,在此先感謝任何幫助。

+0

從你的依賴 – babadaba

+0

刪除咂嘴,旋轉變壓器的javax-4.1.0我想你導入了很多,你不需要的東西,試試這個 編譯「org.igniterealtime.smack:咂嘴,安卓4.1 .6' compile'org.igniterealtime.smack:smack-tcp:4.1.6' compile「org.igniterealtime.smack:smack-extensions:4.1.6」 compile「org.igniterealtime.smack:smack-im: 4.1.6" –

回答

0

使用Android庫

  • 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)有同樣的問題。

嘗試使用啪4.2,中的build.gradle:

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(); 
    } 
} 
相關問題