android asmack和xmpp的关系,尝试在Android上使用aSmack连接到XMPP服务器让我“没有dns解析器处于活动状态”...

我在代码中尽可能简单地做到了这一点.我在版本8-0.8.3中使用asmack库for android.

我的代码:

package info.zajacmp3.servercommunication;

import org.jivesoftware.smack.Connection;

import org.jivesoftware.smack.XMPPConnection;

import org.jivesoftware.smack.XMPPException;

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

public class XmppService extends Service{

public void xmppService() throws XMPPException {

Connection conn1 = new XMPPConnection("jabber.org");

conn1.connect();

}

@Override

public void onCreate(){

//TODO:actions to perform when service is created

try {

xmppService();

} catch (XMPPException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public IBinder onBind(Intent intent) {

// TODO Replace with service binding

return null;

}

}

它冻结我的应用程序并导致我和错误:没有DNS解析器活动.网上没有关于它的任何内容.

我真的希望得到一些帮助或线索.

也试过这样:

private final static String server_host =“jabber.org”;

private final static int SERVER_PORT = 5222;

public void xmppService()throws XMPPException {

ConnectionConfiguration config = new ConnectionConfiguration( server_host, SERVER_PORT);

XMPPConnection m_connection = new XMPPConnection(config);

try {

SASLAuthentication.supportSASLMechanism("PLAIN");

config.setSASLAuthenticationEnabled(true);

m_connection.connect();

Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);

} catch (XMPPException e) {

e.printStackTrace();

}

}

@UPDATE:

使用smack库而不是asmack让我遇到同样的问题.

我没有得到错误日志,但在断开调试器后我得到:

解决方法:

我建议使用Smack而不是aSmack. Asmack是Smack的补丁和增强版本,aSmack有点死了.在Smack中,完成了代码重构,添加了一些新方法和重构的DNS类.

UPDATE

看到您的错误日志后,似乎是主UI线程上的网络调用问题

如何解决NetworkOnMainThread异常?

使用AsyncTask使您的网络调用在不同的线程(在后台)而不是在应用程序的主线程上.

将您的代码移动到AsynTask: –

private class ConnectToXmpp extends AsyncTask {

@Override

protected Void doInBackground(Void... params) {

ConnectionConfiguration config = new ConnectionConfiguration( server_host, SERVER_PORT);

XMPPConnection m_connection = new XMPPConnection(config);

try {

SASLAuthentication.supportSASLMechanism("PLAIN");

config.setSASLAuthenticationEnabled(true);

m_connection.connect();

Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);

} catch (XMPPException e) {

e.printStackTrace();

}

return null;

}

@Override

protected void onPostExecute(Void result) {

}

}

现在你可以执行你的AsyncTask: –

new ConnectToXmpp().execute();

有了这个,您的网络呼叫将在后台以不同的线程进行.

标签:smack,android,dns,xmpp

来源: https://codeday.me/bug/20190723/1509486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值