繁体   English   中英

从android连接到XMPP服务器

[英]Connecting to XMPP server from android

如果我从eclipse作为java应用程序运行类,但是当我在android studio中使用相同的类时,我得到以下RuntimeException

java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/security/sasl/Sasl; 

日志:

FATAL EXCEPTION: Thread-62267
Process: com.abcd.abcd, PID: 14825
java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/security/sasl/Sasl;
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:92)
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:319)
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203)
at com.abcd.abcd.XmppManager.login(XmppManager.java:99)
at com.abcd.abcd.Main.initializeXmppConnection(Main.java:78)
at com.abcd.abcd.Main.init(Main.java:72)
at com.abcd.abcd.Main.<init>(Main.java:61)
at com.abcd.abcd.MainActivity$1.run(MainActivity.java:32)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.security.sasl.Sasl" on path: DexPathList[[zip file "/data/app/com.abcd.abcd-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:92) 
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:319) 
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) 
at com.abcd.abcd.XmppManager.login(XmppManager.java:99) 
at com.abcd.abcd.Main.initializeXmppConnection(Main.java:78) 
at com.abcd.abcd.Main.init(Main.java:72) 
at com.abcd.abcd.Main.<init>(Main.java:61) 
at com.abcd.abcd.MainActivity$1.run(MainActivity.java:32) 
at java.lang.Thread.run(Thread.java:818) 
Suppressed: java.lang.ClassNotFoundException: javax.security.sasl.Sasl
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 10 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

我被困在这里,真的没有得到问题所在。 有帮助吗?

嗨,如果你想更新你的工作室库,这是一个选项是好的,但如果你想在工作室中使用相同的代码,那么你可以在这里访问此代码,检查你是否正确.Ssl权限的一些问题。检查这里正确的方法

private XMPPConnection connect() throws XMPPException, SmackException,
        IOException {
    if ((this.connection != null) && (this.connection.isConnected())) {
        return this.connection;
    }

    ConnectionConfiguration config = new ConnectionConfiguration(HOST1,
            5222);
    SmackConfiguration.DEBUG_ENABLED = true;
    SASLAuthentication.supportSASLMechanism("MD5", 0);
    System.setProperty("smack.debugEnabled", "true");
    config.setCompressionEnabled(false);
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    config.setReconnectionAllowed(true);
    config.setSendPresence(true);
    config.setRosterLoadedAtLogin(true);

    if (Build.VERSION.SDK_INT >= 14) {
        config.setKeystoreType("AndroidCAStore");
        config.setKeystorePath(null);
    } else {
        config.setKeystoreType("BKS");
        String str = System.getProperty("javax.net.ssl.trustStore");
        if (str == null) {
            str = System.getProperty("java.home") + File.separator + "etc"
                    + File.separator + "security" + File.separator
                    + "cacerts.bks";
        }
        config.setKeystorePath(str);
    }
    if (connection == null) {
        this.connection = new XMPPTCPConnection(config);
    }
    this.connection.connect();
    Roster roster = connection.getRoster();
    roster.addRosterListener(new RosterListener() {

        @Override
        public void presenceChanged(Presence arg0) {
            Log.d("deb", "ug");
        }

        @Override
        public void entriesUpdated(Collection<String> arg0) {
            Log.d("deb", "ug");
        }

        @Override
        public void entriesDeleted(Collection<String> arg0) {
            Log.d("deb", "ug");
        }

        @Override
        public void entriesAdded(Collection<String> arg0) {
            Log.d("deb", "ug");
        }
    });
    return this.connection;
}

谢谢

希望这会帮助你。

Android运行时没有javax.security.sasl包,升级你的Smack库,有一个自定义SASL实现的android

您可能应该升级您的库或编译您的gradle。

对于某些信息: Android Studio中的Gradle是什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM