Android Studio : android.os.NetworkOnMainThreadException

ในบางครั้งการเชื่อมต่อเน็ตเวิร์กจะเกิด Error Exception “android.os.NetworkOnMainThreadException” ขึ้น ซึ่งเกิดขึ้นเพราะเรามีการทำงานกับเครือข่ายเน็ตเวิร์ก (Network operation) บน Main UI Thread. ซึ่งแนวทางการแก้ไขมี 2 ทางคือ

  1. ให้ทำงานบน AsyncTask
  2. ให้ทำงานบน New Thread

สำหรับวันนี้จะกล่าวถึงการทำงานบน AsyncTask โดยเราจะสร้าง AsyncTask class ขึ้นมาดังตัวอย่าง

private class myAsync extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            
                     try{
                              URL myURL = new URL("http://www.mydomain.com");
                              HttpURLConnection con = (HttpURLConnection) myURL.openConnection();
                              con.connect();
                      } catch (Exception e) {
                              e.printStackTrace();
                      }
      
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
                
        }
    }

จากนั้นการเรียกคลาส myAsync ให้ทำงาน เราสามารถเรียกโดยใช้คำสั่งดังนี้

new myAsync().execute();

ซึ่งเราอาจเรียกใช้งานภายใน public void onCreate ได้เลย

You may also like...