Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 AsyncTask doInBackground中的NetworkOnMainThreadException_Java_Android - Fatal编程技术网

Java AsyncTask doInBackground中的NetworkOnMainThreadException

Java AsyncTask doInBackground中的NetworkOnMainThreadException,java,android,Java,Android,我试图通过URL解析XML页面中的数据。然而,尽管我所有的网络连接代码都在AsyncTask doInBackground中,我仍然会得到一个“NetworkOnMainThreadException”。有人能帮我指出正确的方向吗 类扩展异步任务 public class ParseRouteXML extends AsyncTask<String, URL, Route> { @Override protected Route doInBackground(String...

我试图通过URL解析XML页面中的数据。然而,尽管我所有的网络连接代码都在AsyncTask doInBackground中,我仍然会得到一个“NetworkOnMainThreadException”。有人能帮我指出正确的方向吗

类扩展异步任务

public class ParseRouteXML extends AsyncTask<String, URL, Route> {


@Override
protected Route doInBackground(String... urlString) {
    //Tags to look for
    InputStream stream = null;
    final String STOP = "stop";
    Route route = null;
    try {
        Log.i("Parser", "Creating factory");
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser parser = factory.newPullParser();

        //Establish connection
        Log.i("Parser", "Creating URL");
        URL url = new URL(urlString[0]);
        Log.i("Parser", "Creating connection");
        URLConnection connection = url.openConnection();
        Log.i("Parser", "Creating stream");
        stream = connection.getInputStream();

        Log.i("Parser", "Stream = " + stream.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return route;
}
}
错误日志

W/System.err: android.os.NetworkOnMainThreadException
W/System.err:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450)
W/System.err:     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
W/System.err:     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
W/System.err:     at java.net.InetAddress.getAllByName(InetAddress.java:787)
W/System.err:     at com.android.okhttp.Dns$1.lookup(Dns.java:39)
W/System.err:     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175)
W/System.err:     at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141)
W/System.err:     at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83)
W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174)
W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244)
W/System.err:     at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.getInputStream(TrackedHttpURLConnection.java:356)
W/System.err:     at com.android.tools.profiler.support.network.httpurl.HttpURLConnection$.getInputStream(HttpURLConnection$.java:207)
W/System.err:     at ca.thepackage.myapp.ParseRouteXML.doInBackground(ParseRouteXML.java:35)
W/System.err:     at ca.thepackage.myapp.HomeActivity.savedStopStopsClick(HomeActivity.java:29)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
W/System.err:     at android.view.View.performClick(View.java:6294)
W/System.err:     at android.view.View$PerformClick.run(View.java:24770)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:790)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err:     at android.os.Looper.loop(Looper.java:164)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6494)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
因为doInBackground(routeUrl)将在同一个线程中执行。您需要这样做:

new ParseRouteXML().execute(routeUrl);
异步任务将在后台线程中完成所有工作。

因为doInBackground(routeUrl)将在同一线程中执行。您需要这样做:

new ParseRouteXML().execute(routeUrl);

异步任务将在后台线程中完成所有工作。

顺便说一句-顺便说一句-这很有效!非常感谢您的帮助和快速回复!这成功了!非常感谢您的帮助和快速回复!