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();