Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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
Android:NetworkOnMainThreadException在执行两个异步任务时出现_Android_Android Asynctask - Fatal编程技术网

Android:NetworkOnMainThreadException在执行两个异步任务时出现

Android:NetworkOnMainThreadException在执行两个异步任务时出现,android,android-asynctask,Android,Android Asynctask,我定义了两个异步任务类。因为我需要在第一个完成后执行第二个,所以我调用 new SecondTask(...).execute(); 在第一个任务的OnPostExecute()中 但是,会出现“android.os.NetworkOnMainThreadException”。为什么? 更新一些代码: private class FirstTask extends AsyncTask<Void, Void, HttpResponse> { ... @Override

我定义了两个异步任务类。因为我需要在第一个完成后执行第二个,所以我调用

new SecondTask(...).execute();
在第一个任务的OnPostExecute()中

但是,会出现“android.os.NetworkOnMainThreadException”。为什么?

更新一些代码:

private class FirstTask extends AsyncTask<Void, Void, HttpResponse> {
    ...
    @Override
    protected HttpResponse doInBackground(Void... arg0) {
        ...
    }
    @Override
    protected void onPostExecute(HttpResponse result) {
        Reader reader = new InputStreamReader(result.getEntity().getContent());
        ...
        HttpUriRequest arg0 = new HttpGet(...);
        new SecondTask(arg0).execute();
    }
}

private class SecondTask extends AsyncTask<Void, Void, HttpResponse> {

    private HttpUriRequest request;

    public ClickRequest(HttpUriRequest req) {
        this.request = req;
    }

    @Override
    protected HttpResponse doInBackground(Void... arg0) {
        // TODO Auto-generated method stub
        try {
            HttpResponse response = httpClient.execute(request);
            return response;
        } catch (IOException e) {
            return null;
        }
    }
}
06-01 20:19:21.726: D/AdlibView(1241): android.os.NetworkOnMainThreadException
06-01 20:19:21.726: D/AdlibView(1241):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
06-01 20:19:21.726: D/AdlibView(1241):  at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
06-01 20:19:21.726: D/AdlibView(1241):  at libcore.io.IoBridge.recvfrom(IoBridge.java:513)
06-01 20:19:21.726: D/AdlibView(1241):  at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
06-01 20:19:21.726: D/AdlibView(1241):  at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
06-01 20:19:21.726: D/AdlibView(1241):  at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
06-01 20:19:21.726: D/AdlibView(1241):  at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
06-01 20:19:21.726: D/AdlibView(1241):  at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)
06-01 20:19:21.726: D/AdlibView(1241):  at org.apache.http.impl.io.ChunkedInputStream.getChunkSize(ChunkedInputStream.java:220)
06-01 20:19:21.726: D/AdlibView(1241):  at org.apache.http.impl.io.ChunkedInputStream.nextChunk(ChunkedInputStream.java:183)
06-01 20:19:21.726: D/AdlibView(1241):  at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:155)
06-01 20:19:21.726: D/AdlibView(1241):  at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:159)
06-01 20:19:21.726: D/AdlibView(1241):  at java.io.InputStreamReader.read(InputStreamReader.java:244)
06-01 20:19:21.726: D/AdlibView(1241):  at java.io.Reader.read(Reader.java:145)
06-01 20:19:21.726: D/AdlibView(1241):  at edu.stanford.cs.adlib.AdLibView$1.onPostExecute(AdLibView.java:41)
06-01 20:19:21.726: D/AdlibView(1241):  at edu.stanford.cs.adlib.AdLibView$1.onPostExecute(AdLibView.java:1)
06-01 20:19:21.726: D/AdlibView(1241):  at android.os.AsyncTask.finish(AsyncTask.java:631)
06-01 20:19:21.726: D/AdlibView(1241):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
06-01 20:19:21.726: D/AdlibView(1241):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
06-01 20:19:21.726: D/AdlibView(1241):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-01 20:19:21.726: D/AdlibView(1241):  at android.os.Looper.loop(Looper.java:137)
06-01 20:19:21.726: D/AdlibView(1241):  at android.app.ActivityThread.main(ActivityThread.java:5041)
06-01 20:19:21.726: D/AdlibView(1241):  at java.lang.reflect.Method.invokeNative(Native Method)
06-01 20:19:21.726: D/AdlibView(1241):  at java.lang.reflect.Method.invoke(Method.java:511)
06-01 20:19:21.726: D/AdlibView(1241):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-01 20:19:21.726: D/AdlibView(1241):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-01 20:19:21.726: D/AdlibView(1241):  at dalvik.system.NativeStart.main(Native Method)
您正在从这里的HttpResponse读取数据。这是在主线程中。您应该将所有与网络相关的代码移出
onPostExecute()

您正在从这里的HttpResponse读取数据。这是在主线程中。您应该将所有与网络相关的代码移出
onPostExecute()

此操作以及与InputStream相关的所有操作都需要在doInBackground内部运行


此操作以及与InputStream相关的所有操作都需要在doInBackground内部运行

您正在主ui线程上运行与网络相关的操作。也检查一下这个。发布一些相关代码,你不回答我的问题。我知道不允许在主ui线程上运行网络操作,所以我使用asynctasks。但是我不明白为什么我不能在第一个OnPostExecute()中执行第二个任务。发布第二个AsyncTask如果你没有发布任何相关代码,怎么可能有人回答你的问题?@yoarcher我们可能需要DoinBackground中的内容你正在主ui线程上运行与网络相关的操作。也检查一下这个。发布一些相关代码,你不回答我的问题。我知道不允许在主ui线程上运行网络操作,所以我使用asynctasks。但是我不明白为什么我不能在第一个OnPostExecute()中执行第二个任务。发布第二个AsyncTask如果你没有发布任何相关代码,怎么可能有人回答你的问题?@yoarcher可能我们需要DoinBackground中的东西谢谢。你救了我一天谢谢。你救了我一天
protected void onPostExecute(HttpResponse result) {
    Reader reader = new InputStreamReader(result.getEntity().getContent());
Reader reader = new InputStreamReader(result.getEntity().getContent());