Android Studio : android.os.NetworkOnMainThreadException
ในบางครั้งการเชื่อมต่อเน็ตเวิร์กจะเกิด Error Exception “android.os.NetworkOnMainThreadException” ขึ้น ซึ่งเกิดขึ้นเพราะเรามีการทำงานกับเครือข่ายเน็ตเวิร์ก (Network operation) บน Main UI Thread. ซึ่งแนวทางการแก้ไขมี 2 ทางคือ
- ให้ทำงานบน AsyncTask
- ให้ทำงานบน 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 ได้เลย