Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓&x27;s StrictMode-我如何正确使用它,为什么没有它我的应用程序不能工作?_Java_Android_Multithreading - Fatal编程技术网

Java 安卓&x27;s StrictMode-我如何正确使用它,为什么没有它我的应用程序不能工作?

Java 安卓&x27;s StrictMode-我如何正确使用它,为什么没有它我的应用程序不能工作?,java,android,multithreading,Java,Android,Multithreading,我已经开始尝试一些简单的概念,比如绑定ListView和将JSON数据提取到填充ListView的适配器。该示例附带以下代码: StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .build(); StrictMode.setThreadPolicy

我已经开始尝试一些简单的概念,比如绑定ListView和将JSON数据提取到填充ListView的适配器。该示例附带以下代码:

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .detectAll()
            .penaltyLog()
            .build();
        StrictMode.setThreadPolicy(policy);
一开始,我并不太担心这个问题

// Testing only. Do NOT USE IN PRODUCTION!
注释,直到我删除了策略代码,这导致我的应用程序每次返回HttpResponse时都开始抛出ANR

看起来我遇到了“android.os.NetworkOnMainThreadException”异常。现在,我可以理解为什么你不希望任何网络代码在你的UI线程上运行,但是如果StrictMode保证抛出运行时异常,为什么StrictMode一开始就允许你这么做呢

同样,有人能解释一下上面的StrictMode片段吗?我已经阅读了Android开发文档,但是对于它如何允许代码运行,我仍然有点困惑

我唯一的理论是下面的伪解释:

对于当前线程,检测所有非法操作。记录问题,但忽略它。设置当前线程的策略以使用此规则


我关闭了吗?

在api 9中,您不能直接调用主线程上的网络操作,而是可以使用AsyncTask来实现。更多信息,请查看此教程。

+1,尽管如果您提供一些示例代码,这将是一个更好的答案。+1教程看起来非常不错,今晚将进行阅读,谢谢。@Rudi网上有很多例子,教程中也有一个例子link@drminnaar是的,请仔细阅读,它会给你很多关于网络异步运行的细节。这不是重点,这是一个非常接近于链接的答案-