Belum lama ini saya melakukan uji coba dengan kondisi abnormal. Dimana aplikasi mengirimkan message dalam bentuk JSON dan host application saya tidak menjawabnya.
Dari hasil uji coba selalu terjadi pesan error "Unfortunately, App has stopped"
Dapat dilihat pada potongan source code diatas jika saya tidak mendapatkan respon maka yang tampil adalah tulisan dari toast "Tidak mendapatkan respon dari server".
Namun pada implementasinya pesan toast tersebut tidak tampil dan ternyata menampilkan pesan error "Unfortunately, App has stopped" disertai force close pada aplikasi.
Isi logcat :
Pada logcat mendapatkan error
FATAL EXCEPTION: main
Saya telusuri lebih jauh penyebabnya ada di
android.os.NetworkOnMainThreadException
Maka saya cek pada AndroidManifest dan INTERNET PERMISSION sudah saya tambahkan. Lalu apa penyebabnya?
Setelah dipelajari, ternyata ada yang tidak tepat dari penggunaan JSON (dalam hal ini menggunakan protokol network) di Activity yang saya gunakan.
Masalah tersebut terjadi di karenakan saya melakukan panggilan network di main (event) thread agar tidak terjadi seperti itu, penggunaan network jangan ditempatkan pada main thread melainkan meletakkan di thread yang berbeda.
Untuk itu kita dapat membuat thread terpisah menggunakan AsyncTask atau Standard Thread.
Contoh Standard Thread:
Contoh AsyncTask:
Dari aplikasi yang saya buat, saya menggunakan AsyncTask untuk memperbaiki error tersebut. Dan masalah "Unfortunately, App has stopped" jika tidak mendapatkan respon dari host server telah terselesaikan.
Penggunaan lebih lanjut dari AsyncTask akan saya bahas di tulisan berikutnya :)
Dari hasil uji coba selalu terjadi pesan error "Unfortunately, App has stopped"
Berikut potongan source code:
try{ if (json.getString(SUCCESS) != null) { String res = json.getString(SUCCESS); if(Integer.parseInt(res) == 100){ // Do something } else{ // Do something } } else { // jika msg didapatkan null atau tidak mendapatkan respon dari host Toast.makeText(getBaseContext(), "Tidak mendapatkan respon dari server ", Toast.LENGTH_LONG).show(); } } catch (JSONException e){ e.printStackTrace(); }
Namun pada implementasinya pesan toast tersebut tidak tampil dan ternyata menampilkan pesan error "Unfortunately, App has stopped" disertai force close pada aplikasi.
Isi logcat :
11-22 18:13:14.221: D/AndroidRuntime(556): Shutting down VM 11-22 18:13:14.221: W/dalvikvm(556): threadid=1: thread exiting with uncaught exception (group=0x409951f8) 11-22 18:13:14.251: E/AndroidRuntime(556): FATAL EXCEPTION: main 11-22 18:13:14.251: E/AndroidRuntime(556): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.riz.testJson/org.riz.testJson.TestJSONActivity}: android.os.NetworkOnMainThreadException 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.ActivityThread.access$600(ActivityThread.java:122) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.os.Handler.dispatchMessage(Handler.java:99) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.os.Looper.loop(Looper.java:137) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.ActivityThread.main(ActivityThread.java:4340) 11-22 18:13:14.251: E/AndroidRuntime(556): at java.lang.reflect.Method.invokeNative(Native Method) 11-22 18:13:14.251: E/AndroidRuntime(556): at java.lang.reflect.Method.invoke(Method.java:511) 11-22 18:13:14.251: E/AndroidRuntime(556): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 11-22 18:13:14.251: E/AndroidRuntime(556): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 11-22 18:13:14.251: E/AndroidRuntime(556): at dalvik.system.NativeStart.main(Native Method) 11-22 18:13:14.251: E/AndroidRuntime(556): Caused by: android.os.NetworkOnMainThreadException 11-22 18:13:14.251: E/AndroidRuntime(556): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084) 11-22 18:13:14.251: E/AndroidRuntime(556): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 11-22 18:13:14.251: E/AndroidRuntime(556): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 11-22 18:13:14.251: E/AndroidRuntime(556): at java.net.InetAddress.getAllByName(InetAddress.java:220) 11-22 18:13:14.251: E/AndroidRuntime(556): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 11-22 18:13:14.251: E/AndroidRuntime(556): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 11-22 18:13:14.251: E/AndroidRuntime(556): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 11-22 18:13:14.251: E/AndroidRuntime(556): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 11-22 18:13:14.251: E/AndroidRuntime(556): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 11-22 18:13:14.251: E/AndroidRuntime(556): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 11-22 18:13:14.251: E/AndroidRuntime(556): at org.riz.testJson.TestJSONActivity.onCreate(TestJSONActivity.java:41) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.Activity.performCreate(Activity.java:4465) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 11-22 18:13:14.251: E/AndroidRuntime(556): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 11-22 18:13:14.251: E/AndroidRuntime(556): ... 11 more 11-22 18:13:48.321: I/Process(556): Sending signal. PID: 556 SIG: 9 11-22 18:14:01.552: D/AndroidRuntime(597): Shutting down VM
FATAL EXCEPTION: main
Saya telusuri lebih jauh penyebabnya ada di
android.os.NetworkOnMainThreadException
Maka saya cek pada AndroidManifest dan INTERNET PERMISSION sudah saya tambahkan. Lalu apa penyebabnya?
Setelah dipelajari, ternyata ada yang tidak tepat dari penggunaan JSON (dalam hal ini menggunakan protokol network) di Activity yang saya gunakan.
Masalah tersebut terjadi di karenakan saya melakukan panggilan network di main (event) thread agar tidak terjadi seperti itu, penggunaan network jangan ditempatkan pada main thread melainkan meletakkan di thread yang berbeda.
Untuk itu kita dapat membuat thread terpisah menggunakan AsyncTask atau Standard Thread.
Contoh Standard Thread:
final Handler handler = new Handler(); new Thread(new Runnable() { @Override public void run() { // Do something long running handler.post(new Runnable() { @Override public void run() { // Do something on the UI Thread } }); } }).start();
public class YourTask extends AsyncTask{ private Context context; private ProgressDialog dialog; public SplitCueTask(Context context) { this.context = context; this.dialog = new ProgressDialog(context); } @Override protected void onPreExecute() { dialog.setMessage(getResources().getString(R.string.loading)); dialog.show(); } @Override protected Boolean doInBackground(Object... objects) { // you logic here, return result return someObject. } @Override protected void onPostExecute(Object someObject) { if (dialog.isShowing()) dialog.dismiss() // handle result here, post it on UI or something else } }
Penggunaan lebih lanjut dari AsyncTask akan saya bahas di tulisan berikutnya :)
Android unfortunately app has stopped Saat tidak menerima response JSON
Reviewed by rizupz
on
Kamis, Januari 24, 2013
Rating:

9 komentar:
trus cara ngatasi masalah seperti ini gmana gan??HH ane juga gitu
Agan masalahnya dimana?
Kalau saya dikarenakan UI thread dan proses networknya disatukan sehingga dipisahkan dengan membuat Async.
iya gan ..mengatasinya gimana....bnyak game di HH saya yang begitu.....mohon solusinya gan [[[email protected]]]
gan klo yg ini masalahnya kenapa ya ?
01-28 04:17:10.302: E/AndroidRuntime(276): FATAL EXCEPTION: main
01-28 04:17:10.302: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kalkulator/com.example.kalkulator.MainActivity}: java.lang.ClassCastException: com.example.kalkulator.MainActivity
Kalau masalahnya di aplikasi seperti path keluar tulisan "unfortunately, path has stopped" itu bagaimana cara mengatasinya ya?
Terimkasih sebelumnya..
makasih
buatnya
infonya
Kalau saat terima telepon keluar tulisaan unfortunately lengine has stopped kenapa ya mas?
Gan saya donlond aplikasi kinemaster bisa di pasang tpi di buka ad pemberitahuan unfortunately mohon solusiny mkasih
Tolong bantu mas saya juga dapet kasus sperti diatas, penyebab nya ketika pada projek yang saya buat berkaitan dengan data base, nah ketika saya buat class yang membaca database pasti error sperti itu
Tolong bantu mas
Posting Komentar