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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio - 对象构造函数中的NetworkOnMainThreadException相关的知识,希望对你有一定的参考价值。

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

有什么建议?

答案

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

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

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

另一答案

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

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

以上是关于Android Studio - 对象构造函数中的NetworkOnMainThreadException的主要内容,如果未能解决你的问题,请参考以下文章

Android--Dagger2入门

android studio 怎么整理

Visual Studio 2015 中的“无法引用默认构造函数”

Android Studio 快捷键

有没有办法更改 Visual Studio 中 IntelliSense 中列出的构造函数的顺序?

Android-Java-构造函数间调用&this内存图