android - Parcelebles ClassNotFoundException RecyclerView -


i new android kindly bare question id basic. tried best find solution online couldnt. trying out recyclerview concepts.

while copying array of data parcelebles array getting error stating "class not found when unmarshalling: java.lang.classnotfoundexception: invalid name:"

mainactivity code :  public class mainactivity extends actionbaractivity {    @injectview(r.id.idtemparaturevalue) textview mtemparaturevalue; @injectview(r.id.idhumidityvalue) textview mhumidityvalue; @injectview(r.id.idrainvalue) textview mrainvalue; @injectview(r.id.idsummaryvalue) textview msummaryvalue; @injectview(r.id.idtimevalue) textview mtimevalue;    private final string tag=mainactivity.class.getsimplename(); public static final string daily_forecast="daily_forecast"; public static final string hourly_forecast="hourly_forecast";  private string apikey="******************"; private double latitude =13.0827; private double longitude =80.2707; forecast mforecast = new forecast();   private string url;/*="https://api.forecast.io/forecast/"+apikey+"/"+latitude+","+longitude;*/   @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);        butterknife.inject(this);      if(isnetworkavailable()){          url="https://api.forecast.io/forecast/"+apikey+"/"+latitude+","+longitude;         log.i(tag,url);         okhttpclient okhttpclient = new okhttpclient();         request request = new request.builder().url(url).build();         call call=okhttpclient.newcall(request);         call.enqueue(new callback() {             @override             public void onfailure(request request, ioexception e) {                }   @override             public void onresponse(response response) throws ioexception {                 try{                     if(response.issuccessful()){                         string jsondata=response.body().string();                         log.v(tag, jsondata);                         log.d(tag, url);                         mforecast =parseforcastdata(jsondata);                         runonuithread(new runnable() {                             @override                             public void run() {                                 updateuiscreen();                             }                         });                      }else{                         alertuseronfailure();                     }                 }catch(ioexception e){                     log.e(tag,"caught exception : "+e);                 }catch(jsonexception e){                     log.e(tag,"caught json exception @ onresponse(): "+e);                     e.printstacktrace();                 }                     }         });     }else{         alertuseronnetworkfailure();         toast.maketext(this,"network illa da koomoota !",toast.length_long).show();     }    }      private forecast parseforcastdata(string jsondata) throws jsonexception{      forecast mforecast=new forecast();      mforecast.setcurrent(getcurrentdetails(jsondata));     mforecast.sethours(gethourlydetails(jsondata));     mforecast.setday(getdailydetails(jsondata));     return mforecast;   }  private day[] getdailydetails(string jsondata) throws jsonexception {          jsonobject forecast=new jsonobject(jsondata);         jsonobject dailyjson=forecast.getjsonobject("daily");          string icon=dailyjson.getstring("icon");         string timezone=forecast.getstring("timezone");         jsonarray dailyjsonarray=dailyjson.getjsonarray("data");         day days[]=new day[dailyjsonarray.length()];         for(int i=0;i<dailyjsonarray.length();i++){             day day=new day();             jsonobject dailyjsondata=dailyjsonarray.getjsonobject(i);             day.setsummary(dailyjsondata.getstring("summary"));             day.seticon(icon);             day.settime(dailyjsondata.getlong("time"));             day.settimezone(timezone);             day.settemparaturemax(dailyjsondata.getint("temperaturemax"));             days[i]=day;         }         return days;  }   private hour[] gethourlydetails(string jsondata) throws jsonexception{      jsonobject forecast=new jsonobject(jsondata);     string timezone=forecast.getstring("timezone");     jsonobject hourly=forecast.getjsonobject("hourly");     jsonarray data=hourly.getjsonarray("data");     hour[] hours=new hour[data.length()];     for(int i=0;i<data.length();i++){         hour hour=new hour();         jsonobject hourdata=data.getjsonobject(i);          hour.setsummary(hourdata.getstring("summary"));         hour.seticon(hourdata.getstring("icon"));         hour.settime(hourdata.getlong("time"));         hour.settemparature(hourdata.getdouble("temperature"));         hour.settimezone(timezone);         hours[i]=hour;       }     return hours;   }   private current getcurrentdetails(string jsondata) throws jsonexception{      current current = new current();      jsonobject forecast=new jsonobject(jsondata);     string timezone=forecast.getstring("timezone");     current.settimezone(timezone);     log.i(tag, timezone);     jsonobject =forecast.getjsonobject("currently");     current.sethumidity(currently.getdouble("humidity"));     current.seticon(currently.getstring("icon"));     current.setpreciptationchance(currently.getdouble("precipprobability"));     current.settemparature(currently.getdouble("temperature"));      current.setsummary(currently.getstring("summary"));     current.settime(currently.getlong("time"));          return current; }    private void updateuiscreen() {     current current=mforecast.getcurrent();      log.i(tag, current.gettemparature() + "");      mtemparaturevalue.settext(current.getformattedtemparature());     mhumidityvalue.settext(current.gethumidity() + "");     mrainvalue.settext(current.getpreciptationchance() + "");     mtimevalue.settext("at " + current.getformattedtime() + " ");     msummaryvalue.settext(current.getsummary());    }  private void alertuseronnetworkfailure() {     networkalertdialogfragment networkdialogfragment=new networkalertdialogfragment();     networkdialogfragment.show(getfragmentmanager(), "error_network_dialog");   }   private void alertuseronfailure() {      dialogfragment dialog=new dialogfragment();     dialog.show(getfragmentmanager(), "error_dialog");    }    private boolean isnetworkavailable() {      boolean networkstatus=false;     connectivitymanager manager= (connectivitymanager) getsystemservice(context.connectivity_service);     networkinfo info = manager.getactivenetworkinfo();     assert info != null;     if(info!=null && info.isavailable() && info.isconnected()){         networkstatus=true;     }      return networkstatus; }  @onclick (r.id.iddaily) public void startdailyactivity(){     intent intent=new intent(this,dailyforecastactivity.class);     intent.putextra(daily_forecast,mforecast.getday());     startactivity(intent); }  @onclick (r.id.idhourly) public void starthourlyactivity(){     intent intent=new intent(this,hourlyforecastactivity.class);     intent.putextra(hourly_forecast,mforecast.gethours());     startactivity(intent); } 

recycler view adapter code :

public class hourlyforecastactivity extends actionbaractivity {      hour[] mhours;      @injectview(r.id.idrecylerview)     recyclerview mrecyclerview;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_hourly_forecast);         butterknife.inject(this);         intent intent=getintent();         parcelable[] parcelables=intent.getparcelablearrayextra(mainactivity.hourly_forecast);         mhours= arrays.copyof(parcelables,parcelables.length,hour[].class);         hourlyadapter adapter=new hourlyadapter(mhours);         mrecyclerview.setadapter(adapter);         recyclerview.layoutmanager layoutmanager=new linearlayoutmanager(this);         mrecyclerview.setlayoutmanager(layoutmanager);         mrecyclerview.sethasfixedsize(true);       } 

forecast class

package com.example.ragesh.myweather;  /**  * created ragesh on 11/6/15.  */ public class forecast {      private hour[] mhours;     private day[] mday;     private current mcurrent;      public hour[] gethours() {         return mhours;     }      public void sethours(hour[] hours) {         mhours = hours;     }      public day[] getday() {         return mday;     }      public void setday(day[] day) {         mday = day;     }      public current getcurrent() {         return mcurrent;     }      public void setcurrent(current current) {         mcurrent = current;     }      public static int geticonid(){         return r.mipmap.partly_cloudy;     } } 

hour class

package com.example.ragesh.myweather;  import android.os.parcel; import android.os.parcelable;  import java.text.simpledateformat; import java.util.date;  /**  * created ragesh on 11/6/15.  */ public class hour implements parcelable{      private long mtime;     private string msummary;     private double mtemparature;     private string micon;     private string mtimezone;      public hour(parcel in) {         msummary=in.readstring();         mtime=in.readlong();         mtemparature=in.readdouble();         micon=in.readstring();     }      public hour() {      }      public string gethour(){         simpledateformat format=new simpledateformat("h a");         date date=new date(mtime*1000);             return format.format(date);     }      public string gettimezone() {         return mtimezone;     }      public void settimezone(string timezone) {         mtimezone = timezone;     }      public long gettime() {         return mtime;     }      public void settime(long time) {         mtime = time;     }      public string getsummary() {         return msummary;     }      public void setsummary(string summary) {         msummary = summary;     }      public int gettemparature() {         return (int) math.round(mtemparature);     }      public void settemparature(double temparature) {         mtemparature = temparature;     }      public string geticon() {         return micon;     }      public void seticon(string icon) {         micon = icon;     }       @override     public int describecontents() {         return 0;     }      @override     public void writetoparcel(parcel dest, int flags) {          dest.writestring(msummary);         dest.writedouble(mtemparature);         dest.writestring(micon);         dest.writelong(mtime);      }      public static final creator<hour> creator=new creator<hour>() {         @override         public hour createfromparcel(parcel source) {             return new hour(source);         }          @override         public hour[] newarray(int size) {             return new hour[size];         }     }; } 

logs :

07-15 14:59:20.708    2554-2572/com.example.ragesh.myweather i/mainactivity﹕ asia/kolkata 07-15 14:59:20.770    2554-2554/com.example.ragesh.myweather i/mainactivity﹕ 85.0 07-15 14:59:23.777    2554-2562/com.example.ragesh.myweather w/art﹕ suspending threads took: 8.576ms 07-15 14:59:23.834    2554-2554/com.example.ragesh.myweather e/parcel﹕ class not found when unmarshalling:     java.lang.classnotfoundexception: invalid name:             @ java.lang.class.classforname(native method)             @ java.lang.class.forname(class.java:309)             @ android.os.parcel.readparcelablecreator(parcel.java:2281)             @ android.os.parcel.readparcelable(parcel.java:2245)             @ android.os.parcel.readparcelablearray(parcel.java:2338)             @ android.os.parcel.readvalue(parcel.java:2206)             @ android.os.parcel.readarraymapinternal(parcel.java:2485)             @ android.os.basebundle.unparcel(basebundle.java:221)             @ android.os.bundle.getparcelablearray(bundle.java:777)             @ android.content.intent.getparcelablearrayextra(intent.java:5112)             @ com.example.ragesh.myweather.hourlyforecastactivity.oncreate(hourlyforecastactivity.java:32)             @ android.app.activity.performcreate(activity.java:6010)             @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1129)             @ android.app.activitythread.performlaunchactivity(activitythread.java:2292)             @ android.app.activitythread.handlelaunchactivity(activitythread.java:2413)             @ android.app.activitythread.access$800(activitythread.java:155)             @ android.app.activitythread$h.handlemessage(activitythread.java:1317)             @ android.os.handler.dispatchmessage(handler.java:102)             @ android.os.looper.loop(looper.java:135)             @ android.app.activitythread.main(activitythread.java:5343)             @ java.lang.reflect.method.invoke(native method)             @ java.lang.reflect.method.invoke(method.java:372)             @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:905)             @ com.android.internal.os.zygoteinit.main(zygoteinit.java:700) 07-15 14:59:23.835    2554-2554/com.example.ragesh.myweather d/androidruntime﹕ shutting down vm 07-15 14:59:23.836    2554-2554/com.example.ragesh.myweather e/androidruntime﹕ fatal exception: main     process: com.example.ragesh.myweather, pid: 2554     java.lang.runtimeexception: unable start activity componentinfo{com.example.ragesh.myweather/com.example.ragesh.myweather.hourlyforecastactivity}: android.os.badparcelableexception: classnotfoundexception when unmarshalling:             @ android.app.activitythread.performlaunchactivity(activitythread.java:2339)             @ android.app.activitythread.handlelaunchactivity(activitythread.java:2413)             @ android.app.activitythread.access$800(activitythread.java:155)             @ android.app.activitythread$h.handlemessage(activitythread.java:1317)             @ android.os.handler.dispatchmessage(handler.java:102)             @ android.os.looper.loop(looper.java:135)             @ android.app.activitythread.main(activitythread.java:5343)             @ java.lang.reflect.method.invoke(native method)             @ java.lang.reflect.method.invoke(method.java:372)             @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:905)             @ com.android.internal.os.zygoteinit.main(zygoteinit.java:700)      caused by: android.os.badparcelableexception: classnotfoundexception when unmarshalling:             @ android.os.parcel.readparcelablecreator(parcel.java:2295)             @ android.os.parcel.readparcelable(parcel.java:2245)             @ android.os.parcel.readparcelablearray(parcel.java:2338)             @ android.os.parcel.readvalue(parcel.java:2206)             @ android.os.parcel.readarraymapinternal(parcel.java:2485)             @ android.os.basebundle.unparcel(basebundle.java:221)             @ android.os.bundle.getparcelablearray(bundle.java:777)             @ android.content.intent.getparcelablearrayextra(intent.java:5112)             @ com.example.ragesh.myweather.hourlyforecastactivity.oncreate(hourlyforecastactivity.java:32)             @ android.app.activity.performcreate(activity.java:6010)             @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1129)             @ android.app.activitythread.performlaunchactivity(activitythread.java:2292)             at android.app.activitythread.handlelaunchactivity(activitythread.java:2413)             at android.app.activitythread.access$800(activitythread.java:155)             at android.app.activitythread$h.handlemessage(activitythread.java:1317)             at android.os.handler.dispatchmessage(handler.java:102)             at android.os.looper.loop(looper.java:135)             at android.app.activitythread.main(activitythread.java:5343)             at java.lang.reflect.method.invoke(native method)             at java.lang.reflect.method.invoke(method.java:372)             at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:905)             at com.android.internal.os.zygoteinit.main(zygoteinit.java:700) 

reading , writing must in same order or parcelable class fail. reading , writing not in same order:

 public hour(parcel in) {     msummary=in.readstring();     mtime=in.readlong();     mtemparature=in.readdouble();     micon=in.readstring(); }   @override  public void writetoparcel(parcel dest, int flags) {      dest.writestring(msummary);     dest.writedouble(mtemparature);     dest.writestring(micon);     dest.writelong(mtime);  }  

fix class using parcelabler here: http://www.parcelabler.com/


Comments