Java 从URL从.txt文件获取内容时出错

Java 从URL从.txt文件获取内容时出错,java,android,url,Java,Android,Url,这是我与从URL获取文本相关的代码。这是我第一次这样做,我无法理解我的错误。我不得不用一个try/catch来包围几乎所有的东西 错误: java.lang.RuntimeException:无法启动活动组件信息{com.wc.gap.worldcupfixture/com.wc.gap.worldcupfixture.MainActivity}:android.os.NetworkOnMainThreadException 在android.app.ActivityThread.Perfor

这是我与从URL获取文本相关的代码。这是我第一次这样做,我无法理解我的错误。我不得不用一个try/catch来包围几乎所有的东西

错误:

java.lang.RuntimeException:无法启动活动组件信息{com.wc.gap.worldcupfixture/com.wc.gap.worldcupfixture.MainActivity}:android.os.NetworkOnMainThreadException 在android.app.ActivityThread.PerformLaunchActivityActivityRead.java:2298 在android.app.ActivityThread.handleLaunchActivityYaActivityThread.java:2360 访问$800ActivityThread.java:144 在android.app.ActivityThread$H.handleMessageActivityThread.java:1278 位于android.os.Handler.dispatchMessageHandler.java:102 在android.os.Looper.Looper.java:135 在android.app.ActivityThread.mainActivityThread.java:5221 在java.lang.reflect.Method.Invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:372 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:899 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:694 原因:android.os.NetworkOnMainThreadException 在android.os.StrictMode$AndroidBlockGuardPolicy.onNetworkStrictMode.java:1147 在java.net.InetAddress.lookupHostByNameInetAddress.java:418 位于java.net.InetAddress.GetAllByNameImplineAddress.java:252 位于java.net.InetAddress.getAllByNameInetAddress.java:215 位于com.android.okhttp.HostResolver$1.getAllByNameHostResolver.java:29 位于com.android.okhttp.internal.http.RouteSelector.resetnextinetsocketaddress RouteSelector.java:232 位于com.android.okhttp.internal.http.RouteSelector.nextRouteSelector.java:124 位于com.android.okhttp.internal.http.HttpEngine.connectHttpEngine.java:272 位于com.android.okhttp.internal.http.HttpEngine.sendRequestHttpEngine.java:211 位于com.android.okhttp.internal.http.HttpURLConnectionImpl.executehttppurlconnectionimpl.java:373 位于com.android.okhttp.internal.http.HttpURLConnectionImpl.getresponsehttppurlconnectionimpl.java:323 位于com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStreamHttpURLConnectionImpl.java:190 在java.net.URL.openStreamURL.java:470 位于com.wc.gap.worldcupfixture.MainActivity.onCreateMainActivity.java:102 在android.app.Activity.performCreateActivity.java:5933 在android.app.Instrumentation.callActivityOnCreateInstrumentation.java:1105 在android.app.ActivityThread.performLaunchActivityActivityThread.java:2251 在android.app.ActivityThread.handleLaunchActivityYaActivityThread.java:2360 访问$800ActivityThread.java:144 在android.app.ActivityThread$H.handleMessageActivityThread.java:1278 位于android.os.Handler.dispatchMessageHandler.java:102 在android.os.Looper.Looper.java:135 在android.app.ActivityThread.mainActivityThread.java:5221 在java.lang.reflect.Method.Invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:372 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:899 在com.android.internal.os.ZygoteInit.mainZygoteInit.java:694上使用以下代码:-

URL scoreU = null;
    try {
        scoreU = new URL("http://m.uploadedit.com/b044/1422550899503.txt");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    BufferedReader in = null;
    try {
        in = new BufferedReader(
                new InputStreamReader(
                        scoreU.openStream()));
    } catch (IOException e) {
        e.printStackTrace();
    }

    String inputLine;

    try {
        while ((inputLine = in.readLine()) != null)
            System.out.println(inputLine);
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

Android不允许在主线程上进行网络请求,因为这会导致UI无响应。相反,您必须在后台线程上完成工作,但这对于异步任务来说非常容易,例如:

try {
        URL url = new URL("http://m.uploadedit.com/b044/1422550899503.txt");
        URLConnection urlConnection = url.openConnection();
        HttpURLConnection connection = null;
        connection = (HttpURLConnection) urlConnection;

        BufferedReader in = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String urlString = "";
        String current;
        while ((current = in.readLine()) != null) {
            urlString += current;
        }
        System.out.println(urlString);
    } catch (IOException e) {
        e.printStackTrace();
    }

稍后我会检查你的代码。第一个答案在第一次尝试中奏效了
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ...

        // Start the task here
        new URLDataLoader().execute(theURL);
    }

    private class URLDataLoader extends AsyncTask<URL, Void, String> {
        @Override
        protected String doInBackground(URL... params) {
            URL theURL = params[0];
            // Do your network stuff here to get the data
            return theData;
        }

        @Override
        protected void onPostExecute(String data) {
            // Use the data here
        }
    }
}