在org.jivesoftware.smack.SmackAndroid $ 1.onReceive接收广播意图时出错

时间:2017-08-18 01:56:24

标签: android asmack

我的asmack库有bug,请告诉我正确的asmack库版本和下载地址,或者告诉我其他解决方案。非常感谢你!

App中偶尔发生闪回。有关详细信息,请参阅代码和图片说明。 (Lookup.refreshDefault)与网络的操作有关,主线程无法进行网络操作,onReceive方法应该启动一个新的线程,但是我找不到asmack库的源代码,代码无法修改,我只有类文件。请经验丰富的开发人员告诉我如何解决这个问题。

android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
    at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
    at java.net.InetAddress.getByName(InetAddress.java:305)
    at org.xbill.DNS.SimpleResolver.<init>(SimpleResolver.java:56)
    at org.xbill.DNS.SimpleResolver.<init>(SimpleResolver.java:68)
    at org.xbill.DNS.ExtendedResolver.<init>(ExtendedResolver.java:266)
    at org.xbill.DNS.Lookup.refreshDefault(Lookup.java:86)
    at org.jivesoftware.smack.SmackAndroid$1.onReceive(SmackAndroid.java:26)
    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:879)

Crash log screenshot

Error code location

1 个答案:

答案 0 :(得分:1)

当您尝试在UI或主线程上访问Internet时,会发生此NetworkOnMainThreadException。

要在Android应用程序中访问互联网,您需要创建AsyncTask或服务。

在您的活动中创建AsyncTask。

class Refresh extends AsyncTask<Void, Void, Void> {

protected Void doInBackground(String... params) {
    Lockup.refreshDefault();
   }
}

将此行替换为Lockup.refreshDefault();

希望它有所帮助。