Android Studio - 对象构造函数中的NetworkOnMainThreadException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio - 对象构造函数中的NetworkOnMainThreadException相关的知识,希望对你有一定的参考价值。
我在AVObject brandObj = query.getFirst();
的行中遇到NetworkOnMainThreadException的错误。在对错误进行了一些搜索后,我想我应该使用像Asynctask这样的东西。但无法弄清楚如何做到这一点。
AVObject
与ParseObject
相同
public class Product {
Product(AVObject object) {
try {
AVObject brandObj = query.getFirst(); // this one is making network request
} catch (AVException e) {
e.printStackTrace();
}
}
}
我应该extends AsyncTask<AVObject, Void, AVObject>
然后
@Override
protected AVObject doInBackground(AVObject... objects) {
return null;
}
但不确定我应该在doInBackground
写什么
有什么建议?
当应用程序尝试在其主线程上执行网络操作时,将引发NetworkOnMainThreadException。仅针对Honeycomb SDK或更高版本的应用程序进行此操作。
您无法在主线程上执行任何网络连接,因为它可能会阻止UI。因此,您应该在单独的线程中执行所有操作。
AsyncTask是更简单的解决方案之一。设置您的AsyncTask(按照一些教程/指南)并将您的网络代码放入doInBackground()方法,该方法在一个单独的线程上运行。
理想情况下,对象的构造函数不执行磁盘I / O或网络I / O.在你的情况下,它确实如此。
因此,调用qazxsw poi的每一段代码都需要放入后台线程(普通线程,RxJava链,qazxsw poi,qazxsw poi等)。 new Product(...)
本身不会改变。
以上是关于Android Studio - 对象构造函数中的NetworkOnMainThreadException的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2015 中的“无法引用默认构造函数”