Android Studio - 对象构造函数中的NetworkOnMainThreadException

问题描述 投票:-1回答:2

我在AVObject brandObj = query.getFirst();的行中遇到NetworkOnMainThreadException的错误。在对错误进行了一些搜索后,我想我应该使用像Asynctask这样的东西。但无法弄清楚如何做到这一点。

AVObjectParseObject相同

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写什么

有什么建议?

android parsing object android-asynctask networkonmainthread
2个回答
1
投票

当应用程序尝试在其主线程上执行网络操作时,将引发NetworkOnMainThreadException。仅针对Honeycomb SDK或更高版本的应用程序进行此操作。

您无法在主线程上执行任何网络连接,因为它可能会阻止UI。因此,您应该在单独的线程中执行所有操作。

AsyncTask是更简单的解决方案之一。设置您的AsyncTask(按照一些教程/指南)并将您的网络代码放入doInBackground()方法,该方法在一个单独的线程上运行。


1
投票

理想情况下,对象的构造函数不执行磁盘I / O或网络I / O.在你的情况下,它确实如此。

因此,调用qazxsw poi的每一段代码都需要放入后台线程(普通线程,RxJava链,qazxsw poi,qazxsw poi等)。 new Product(...)本身不会改变。

© www.soinside.com 2019 - 2024. All rights reserved.