我试图通过启动TCP服务器来访问Android网络。但是当我创建一个新的线程时,要么通过
Thread t = new Thread(runnable);
t.start();
或FutureTask
我仍然得到networkonmainthreadexception
...
答案 0 :(得分:2)
使用AsyncTask执行与网络相关的操作
例如:
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
@Override
protected void onPostExecute(String result) {
textView.setText(result);
}
}
或者你可以这样做,虽然不推荐
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
添加此代码将不再为主线程异常提供网络。
答案 1 :(得分:1)
您必须在线程中runnable的run()函数上执行实际的网络IO。您不仅要创建一个线程,还要执行IO。