Java 创建新线程的限制
我在主线程上不断遇到网络错误。它指向代码中的这一部分:Java 创建新线程的限制,java,android,Java,Android,我在主线程上不断遇到网络错误。它指向代码中的这一部分:HttpResponse response=httpclient.execute(httppost) 这是我的整个线程,但我不明白它怎么说我在主线程上运行它,而它最明确地在这个特定的单独线程上 new Thread(new Runnable() { @Override public void run() { try {
HttpResponse response=httpclient.execute(httppost)代码>
这是我的整个线程,但我不明白它怎么说我在主线程上运行它,而它最明确地在这个特定的单独线程上
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mywebsite.com");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", name));
nameValuePairs.add(new BasicNameValuePair("phonenumber", phone));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
result = EntityUtils.toString(response.getEntity());
edit_name.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity(), result, Toast.LENGTH_LONG).show();
}
});
db.submitFirstUser(name, phone);
}
catch(ClientProtocolException e){
}
catch (IOException e) {
}
}
}).run();
你应该从线程开始
thread.start();
不使用thread.run()
只调用Runnable上的run()
方法。您希望在新线程上实际启动Runnable。要启动线程,请使用start()
,因此:
.run();
应该是:
.start();
实际上,您正在调用在主线程上执行代码的run()方法。调用instaed的start()方法将生成一个单独的线程。NetworkOnMainThreadException
建议使用其他线程选项,例如AsyncTask
和Handler.post(Runnable)
,它们提供了更好的性能。手动线程对性能不友好。哇,这有点尴尬。谢谢。
.start();