android.os.NetworkOnMainThreadException异常

时间:2015-09-11 13:04:00

标签: android multithreading android-asynctask android-runonuithread

当我尝试运行此代码时,它会出现此错误android.os.NetworkOnMainThreadException以下是完整代码:

final EditText editText = (EditText) findViewById(R.id.ed);
    Button buttonX = (Button) findViewById(R.id.ok);
    buttonX.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String message = editText.getText().toString();
            new Thread() {
                public void run() {
                    Log_in.this.runOnUiThread(new Runnable() {
                        @Override 
                        public void run() {
                            try {
                                URL url = new URL(message);
                                HttpURLConnection.setFollowRedirects(false);
                                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                                con.setRequestMethod("HEAD");
                                con.connect();
                                Log.d("URL Result", "con.getResponseCode() IS : " + con.getResponseCode());
                                if ((con.getResponseCode() >= 200) && (con.getResponseCode() <= 399)) {
                                    Log.d("URL Result", "Sucess");

                                    Toast.makeText(getBaseContext(), "GOOD!", Toast.LENGTH_SHORT).show();

                                    Intent intent = new Intent(Log_in.this, MainActivity.class);
                                    startActivity(intent);
                                } else
                                    Log.d("URL Result", "con.getResponseCode() IS : " + con.getResponseCode());
                            } catch (Exception e)

                            {
                                e.printStackTrace();
                                Log.d("URL Result", "fail");
                            }
                        }
                    });
                }
            }.start();
        }
    });
}

我想我应该使用AsyncTask,但我不知道如何在我当前的代码中使用它,有人知道我应该怎么做或者我的代码搞砸了,我应该以某种方式改变它?

1 个答案:

答案 0 :(得分:2)

new Thread() {
       public void run() {
             Log_in.this.runOnUiThread(new Runnable() {

你正在产生一个线程,只是为了让它的运行方法在UI线程上运行。这是原因您获得NetworkOnMainThreadException的原因。你必须使用

 Log_in.this.runOnUiThread(new Runnable() {

仅对UI进行更改并显示Toast