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.
entfernen Klaps-Resolver-javax-4.1.0 von Ihrer Abhängigkeit – babadaba
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 " –