AsyncTask android error when closing the program after -


i developing android news reader apps. have asynctask implements serializable, can save instance. use handle app refresh when rotating phone. work, when rotate apps, task still running. when task running, , press home button/back button close apps, apps become force closed. there wrong code?

@override protected void onsaveinstancestate(final bundle outstate) {     // super.onsaveinstancestate(outstate);     outstate.putint("curpage", mpager.getcurrentitem());     outstate.putint("drawerpos", drawerpos);     outstate.putserializable("task", task);     if (dialog != null) {         outstate.putboolean("isdialogshowing", dialog.isshowing());     } else {         outstate.putboolean("isdialogshowing", false);     }     // outstate.putserializable("dialog", dialog); }  // dismiss dialog if activity destroyed @override protected void ondestroy() {     if (dialog != null && dialog.isshowing()) {         dialog.dismiss();         dialog = null;     }     if (task.getstatus() == asynctask.status.running)         task.cancel(true);     task = null;     super.ondestroy(); } 

myasynctask:

public class asynctaskrefreshrss extends     asynctask<string, string, arraylist<beritaheader>> implements serializable{  /**  *   */ private static final long serialversionuid = 3385729493967673390l;  private onresponselistener responder;  // myalertdialogfragment mydialog; progressdialog dialog; fragmentmanager fm; context context; string type; string subtype;  public asynctaskrefreshrss(context context, fragmentmanager fm,         string type, string subtype, onresponselistener listener) {     this.fm = fm;     this.context = context;     this.type = type;     this.subtype = subtype;     this.responder = listener; }  public void setfinishlistener(onresponselistener listener){     this.responder = listener; }  public void setdialog(progressdialog dialog) {     this.dialog = dialog; }  @override protected void onpreexecute() {     dialog.show(); }  @override protected arraylist<beritaheader> doinbackground(string... arg0) {     mywebservice ws = new mywebservice();     try {         return ws.getrss(type, subtype);     } catch (exception e) {         return null;     }  }  public interface onresponselistener {     public void onsuccess();      public void onfailure(); }  @override protected void onpostexecute(arraylist<beritaheader> result) {     if (dialog.isshowing())         dialog.dismiss();     if (result != null) {         newsdatasource ds = new newsdatasource(context);         ds.deleteallberita(type, subtype);         ds.createberita(result, type, subtype);         responder.onsuccess();     } else {         toast toast = toast.maketext(context, "gagal memuat",                 toast.length_long);         toast.show();         responder.onfailure();     }     // asyncstate = do_nothing; }  public static class myalertdialogfragment extends dialogfragment {      public boolean iscanceled;      public static myalertdialogfragment newinstance() {         myalertdialogfragment frag = new myalertdialogfragment();         return frag;     }      public dialog oncreatedialog(bundle savedinstancestate) {         final progressdialog dialog = new progressdialog(getactivity());         dialog.setmessage("sedang memuat");         dialog.setindeterminate(false);         dialog.setcancelable(false);         dialog.setoncancellistener(new oncancellistener() {              @override             public void oncancel(dialoginterface dialog) {                 // todo auto-generated method stub                 iscanceled = true;             }         });         iscanceled = false;         return dialog;     }  } } 

my logcat:

07-19 19:37:00.905: e/androidruntime(29243): fatal exception: main 07-19 19:37:00.905: e/androidruntime(29243): java.lang.runtimeexception: parcelable encountered ioexception writing serializable object (name = com.karyadigital.beritaku.berita.asynctaskrefreshrss) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.parcel.writeserializable(parcel.java:1279) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.parcel.writevalue(parcel.java:1233) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.parcel.writemapinternal(parcel.java:591) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.bundle.writetoparcel(bundle.java:1619) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.parcel.writebundle(parcel.java:605) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.app.activitymanagerproxy.activitystopped(activitymanagernative.java:2247) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.app.activitythread$stopinfo.run(activitythread.java:2915) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.handler.handlecallback(handler.java:615) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.handler.dispatchmessage(handler.java:92) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.looper.loop(looper.java:137) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.app.activitythread.main(activitythread.java:4898) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.lang.reflect.method.invokenative(native method) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.lang.reflect.method.invoke(method.java:511) 07-19 19:37:00.905: e/androidruntime(29243):    @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1008) 07-19 19:37:00.905: e/androidruntime(29243):    @ com.android.internal.os.zygoteinit.main(zygoteinit.java:775) 07-19 19:37:00.905: e/androidruntime(29243):    @ dalvik.system.nativestart.main(native method) 07-19 19:37:00.905: e/androidruntime(29243): caused by: java.io.notserializableexception: android.app.application 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writenewobject(objectoutputstream.java:1364) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writeobjectinternal(objectoutputstream.java:1671) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writeobject(objectoutputstream.java:1517) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writeobject(objectoutputstream.java:1481) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writefieldvalues(objectoutputstream.java:979) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.defaultwriteobject(objectoutputstream.java:368) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writehierarchy(objectoutputstream.java:1074) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writenewobject(objectoutputstream.java:1404) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writeobjectinternal(objectoutputstream.java:1671) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writeobject(objectoutputstream.java:1517) 07-19 19:37:00.905: e/androidruntime(29243):    @ java.io.objectoutputstream.writeobject(objectoutputstream.java:1481) 07-19 19:37:00.905: e/androidruntime(29243):    @ android.os.parcel.writeserializable(parcel.java:1274) 07-19 19:37:00.905: e/androidruntime(29243):    ... 15 more 

you can't make asynctask serializable , serialize it. why: can't make because system try serialize fields , on each field's fields. , if field not serializable , not marked transient you'll above exception.

if want decouple asynctask activity when activity recreated, use configuration changes fragments. here's an article describes how to.


Comments