Java 从URL从.txt文件获取内容时出错
这是我与从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上使用以下代码:-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 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
}
}
}