会挽雕弓如满月,西北望,射天狼。这篇文章主要讲述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.在你的情况下,它确实如此。
【Android Studio - 对象构造函数中的NetworkOnMainThreadException】因此,调用qazxsw poi的每一段代码都需要放入后台线程(普通线程,Rxjava链,qazxsw poi,qazxsw poi等)。
new Product(...)
本身不会改变。推荐阅读
- 通过在Android中实现Proguard,使用JDBC在Asynctask中崩溃
- 无法将值传递给Android中的AsyncTask
- AsyncTask Android方法的技术差异
- Android AsyncTask问题(连接到Web服务)
- Android(Kotlin) - 如何等待异步任务完成()
- E / AndroidRuntime(致命异常:Android的AsyncTask#1 ERROR)
- Android AsyncTask无法运行
- AsyncTask在android中加载数据的次数非常不同
- Android Socket,AsyncTask,Handler内存泄漏