Cara Mengatasi Error android.os.NetworkOnMainThreadException - Halo semua, pada kesempatan kali ini Kompikaleng akan membagikan tips bagi kalian programmer android untuk mengatasi error android.os.NetworkOnMainThreadException. Bagi kalian para programmer android, tentunya sudah tak asing dengan Exception ini. Exception ini dithrown / dilempar ketika sebuah aplikasi mencoba menjalankan network pada main thread aplikasi tersebut.
Exception ini sering kali terjadi ketika aplikasi yang kita buat menggunakan permission internet pada android manifestnya. Dengan begitu aplikasi tersebut dapat mengakses operasi jaringan, namun problemnya apabila operasi jaringan tersebut bekerja di thread utama / main thread.
Untuk mengatasi exception atau error android.os.NetworkOnMainThreadException ini dapat melalui 2 cara menurut kompikaleng, antara lain :
- Menempatkan Network Actions pada Asynctask / background
- Menonaktifkan / disable strict mode
Artikel ini bersumber dari salah satu thread dari Stackoverflow, di thread tersebut banyak cara yang dapat dicoba untuk mengatasi exception ini. Namun, saya mengambil 2 cara yang saya rasa paling mudah untuk diterapkan khususnya bagi pemula.
Menempatkan Network Actions pada Background / Async Task
Async Task merupakan class yang mengimplementasikan aksi – aksi / methods nya pada background service. Artinya semua actions yang berjalan pada class ini akan berjalan pada latar belakang tanpa menunggu proses eksekusi aksi selanjutnya.
Sebagai contoh anda memiliki kode sebagai berikut :
URL url = new URL(urlFeed);SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();XMLReader xmlreader = parser.getXMLReader();RssHandler theRSSHandler = new RssHandler();xmlreader.setContentHandler(theRSSHandler);InputSource is = new InputSource(url.openStream());xmlreader.parse(is);return theRSSHandler.getFeed();
Untuk menempatkannya pada Async Task, dapat melalui cara berikut :
class ambilFeedTask extends AsyncTask<String, Void, RSSFeed> {private Exception exception;protected RSSFeed doInBackground(String... urls) {try {URL url = new URL(urls[0]);SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();XMLReader xmlreader = parser.getXMLReader();RssHandler theRSSHandler = new RssHandler();xmlreader.setContentHandler(theRSSHandler);InputSource is = new InputSource(url.openStream());xmlreader.parse(is);return theRSSHandler.getFeed();} catch (Exception e) {this.exception = e;return null;} finally {is.close();}}protected void onPostExecute(RSSFeed feed) {// TODO: check this.exception// TODO: do something with the feed}}
Kemudian, kamu dapat menjalankan class tersebut pada method onCreate dengan menginstance class tersebut dengan cara sebagai berikut :
new RetrieveFeedTask().execute(urlFeed);
Dengan begitu, fungsi tersebut akan berjalan di latar belakang tanpa mengganggu main thread.
Disable Strict Mode
Cara ke-dua yaitu dengan menonaktifkan strict mode. Strict Mode pada Android adalah mode yang membatasi akses – akses untuk mencegah terjadinya error / exception pada aplikasi android.
untuk Mengatasi Error android.os.NetworkOnMainThreadException , kita dapat mendisable strict mode dengan kode sebagai berikut :
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);
Kemudian tempatkan kode di atas pada onCreate().
Gimana? apa kalian sudah bisa mengatasi error android.os.NetworkOnMainThreadException ?
Kalau kalian merasa artikel ini bermanfaat, jangan lupa tinggalkan komentar ya.
Terima kasih.
Share This :
comment 0 komentar
more_vert