[Solved] Android Networking Problem fatal exception network On Main Thread Exception

Berbagi tips mungkin bagi yang sedang mengembangkan aplikasi android dengan fitur networking / terhubung dengan internet. Mungkin akan mengalami error dengan pesan seperti ini

 fatal exception android.os.networkOnMainThreadException

Berdasarkan informasi yang saya dapatkan bahwa error ini biasanya terjadi pada android versi 3.0 (honeycomb) ke atas. Pada aplikasi/activity yang memiliki user interface, disarankan untuk menghindari adanya komunikasi yang terus-menerus ke network/file.

Karena itu pada android versi 3.0 memiliki fitur StrictMode. StrictMode akan mengatur kebijakan agar activity tidak melakukan proses yang tidak perlu di background. Sehingga jika anda memiliki aplikasi/activity yang tidak menyertakan StrictMode, maka error seperti diatas akan muncul.

Hal ini sebenarnya dapat diatasi dengan mengganti target min sdk menjadi turun, misal 7. Ketika dicompile ulang, maka aplikasi anda berjalan sebagaimana semestinya. Namun caranya ini tidak disarankan oleh developer yang sudah berpengalaman.

Caranya dengan menambahkan

if (android.os.Build.VERSION.SDK_INT > 9) {
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
      StrictMode.setThreadPolicy(policy);
}

2 tanggapan untuk “[Solved] Android Networking Problem fatal exception network On Main Thread Exception

  • 27-08-2014 pada 13:15
    Permalink

    Jadi apakah strict mode dalam android itu harus diaktifkan atau tidak pak?

    Balas
    • 28-08-2014 pada 11:22
      Permalink

      Strict mode itu pada network mulai digunakan pada android diatas versi 3.0. Salah satunya tidak diperbolehkan melakukan komunikasi network secara langsung. Fungsinya untuk performansi dan security. Untuk menghindari strict mode itu bisa dgn menggunakan script diatas, hanya saja konsekuensinya pada performansi dan security, walau mgkn tdk terlalu signifikan kalau dilihat.

      Atau jika ingin tetap ada strict mode, maka mekanisme coding network harus diubah, yaitu komunikasi network melalui background.

      Pilihannya jadi tergantung programmer

      Balas

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *