2016-08-12 3 views
2

Ich bin neu bei Android-Programmierung, etwa zwei Monate. Ich habe ziemlich viel Zeit damit verbracht, die Lösung zu finden, bevor ich hier poste. Also werde ich direkt auf die Frage eingehen und danach werde ich erklären, was bei mir nicht funktioniert hat.Verwendung von Smack mit Android Studio zur Vernetzung mit OpenFire XMPP Server

Die Frage lautet wie folgt (es wie pro Titel):

Wie verwende ich Smack 4.1.5 mit Android Studio 2.1.2 mit Openfire XMPP Server 4.0.2 zu vernetzen? Im Idealfall würde ein kurzes Stück Code, der sich anmeldet und Chats sendet und empfängt, geschätzt. Ansonsten wären starke Hinweise sehr willkommen. (Habe ich eine Bibliothek ausgelassen? Ist etwas falsch mit dem Versuch-n-fangen?)

Die MainActivity.java Datei ist wie folgt (Ich habe das letzte Bit Code auskommentiert, um in das Problem hineinzuzoomen Das Beste, was ich feststellen kann, ist das Problem an der Zeile kurz bevor der Kommentar beginnt (/ *) .Dies ist jedoch seltsam, da diese Zeile praktisch die gleiche wie die von Smack empfohlene ist. Deshalb frage ich Hilfe und lass mich hier sagen: "Danke im Voraus".)

(Von cos, ich habe einen Openfire XMPP Server auf meinem PC laufen und laufen lassen. Ich hatte auch Funke auf dem Openfire XMPP Server und es angeschlossen und gesendet und empfangen Chats in Ordnung.):

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()"); 
} 

Die Logcat (Fehlermeldungen nur) ist wie folgt:

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 

Ich habe die App build.gradle eingerichtet, alle geeigneten Bibliotheken zu importieren (oder zumindest ich glaube, ich habe). Dazu gehören:

<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 

Das obige ist die grundlegende Information zu der Frage.

Das Folgende war die "Hausaufgabe", die ich versuchte, bevor Sie diese Frage stellen.

Ich hatte durch jedes Wort der Smack-Dokumentation gegossen (http://download.igniterealtime.org/smack/docs/latest/documentation/). Anfangs habe ich versucht, die "paar Zeilen Code" können Sie in der Dokumentation vorgeschlagen:

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

Leider keine Freude überhaupt.

Dann habe ich zu testen, dass eine Zeile: (Ha-ha-ha. Stack Overflow sagt, dass der Code, den ich zitieren wollte sieht wie Spam, so dass ich an dieser Stelle. Jetzt ist es nicht mehr lustig cos sogar der vorherige Satz sah Spam auf SO. Mal sehen, ob diese beiden Sätze mir erlauben, diesen Beitrag durch zu bekommen.) (Ha-ha. Stack Overflow sagt, ich brauche mindestens 10 Ruf, um mehr als 2 Links, so dass der Link ich Ich wollte nur sagen, ich musste eine Zeile Code von der Seite "Erste Schritte" der Smack-Dokumentation.

Noch vergeblich.

Vertrauen Sie mir, ich habe alle anderen vorgeschlagenen Lösungen im Netz (einschließlich an anderer Stelle auf Stapel-Überlauf) versucht, aber ich habe mit allen von ihnen gescheitert. Jedes Mal würde irgendeine Fehlermeldung oder andere auftreten. Alternativ würde das gegebene Codebeispiel mehr Codierungshops beinhalten, als ich arbeiten musste.Beispielsweise kann sich das Codebeispiel auf eine Methode beziehen, die nicht definiert wurde, oder auf eine Klasse, die selbst erstellt werden musste.

Also noch einmal, vielen Dank im Voraus für jede Hilfe zu diesem Thema.

+0

entfernen Klaps-Resolver-javax-4.1.0 von Ihrer Abhängigkeit – babadaba

+0

Ich glaube, Sie viele Dinge importieren, die Sie nicht brauchen, versuchen Sie diese Kompilierung ‚org.igniterealtime.smack: Klatschenkleks android: 4.1 .6 ' kompilieren' org.ignitorealtime.smack: smack-tcp: 4.1.6 ' kompilieren "org.ignitorealtime.smack: smack-extensions: 4.1.6" kompilieren "org.ignitorealtime.smack: smack-im: 4.1.6 " –

Antwort

0

Verwenden android Bibliotheken

  • org.igniterealtime.smack: Klatschenkleks android: 4.1.6
  • org.igniterealtime.smack: Klaps-tcp: 4.1.6
  • org.igniterealtime.smack : smack-im: 4.1.6

Diese Bibliotheken reichen aus, um loszulegen. Alle Java-Bibliotheken sind nicht kompatibel mit Android, speziell Javax-Paket.

0

Ich hatte das gleiche Problem mit Smack 4.1.x (NoClassDefFoundError auf InitialDirContext).

Try Smack 4.2, in build.gradle mit:

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

Und das ist, wie ich die Verbindung initialisiert.

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(); 
    } 
} 
Verwandte Themen