2015-04-27 51 views
0

我试图在片段之间传递对象,并使用Parcelable接口。解组时未找到类

这里是我的课,但东西是搞砸了与ArrayList的属性,我得到:

java.lang.ClassNotFoundException: hu.company.myapp.modul.RaceDayUnit 

和我班有RaceDayUnits的ArrayList。所有工作都正常,直到我开始使用ArrayList。

如果可以,请帮助。

我的类:

public class RegattaUnit implements Parcelable { 

public String id; 
public String name; 
public String type; 
public String status; 
public String token; 

public ArrayList<RaceDayUnit> raceDays = new ArrayList<RaceDayUnit>(); 


public static class Status { 
    public static String NEW = "invited"; 
    public static String JOINED = "joined"; 
    public static String DECLINED = "declined"; 
} 

public RegattaUnit() { 
} 

// not used at all 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel out, int flags) { 
    out.writeString(id); 
    out.writeString(name); 
    out.writeString(type); 
    out.writeString(status); 
    out.writeString(token); 
    out.writeList(raceDays); 
} 

private RegattaUnit(Parcel in) { 
    id = in.readString(); 
    name = in.readString(); 
    type = in.readString(); 
    status = in.readString(); 
    token = in.readString(); 

    raceDays = new ArrayList<RaceDayUnit>(); 
    in.readList(raceDays, null); 
} 


public static final Creator<RegattaUnit> CREATOR = new Creator<RegattaUnit>() { 

    public RegattaUnit createFromParcel(Parcel in) { 
     return new RegattaUnit(in); 
    } 

    public RegattaUnit[] newArray(int size) { 
     return new RegattaUnit[size]; 
    } 
}; 

public RegattaUnit(JSONObject regattaJSONObject, String status) throws JSONException { 

    //parsing from a jsonObject, the ArrayList is getting filled here. 


    } 




} 


} 

日志输出:

04-27 12:54:23.014: E/Parcel(9257): Class not found when unmarshalling: hu.mycomp.myapp.modul.RaceDayUnit 
    04-27 12:54:23.014: E/Parcel(9257): java.lang.ClassNotFoundException: hu.mycomp.myapp.modul.RaceDayUnit 
    04-27 12:54:23.014: E/Parcel(9257):  at java.lang.Class.classForName(Native Method) 
    04-27 12:54:23.014: E/Parcel(9257):  at java.lang.Class.forName(Class.java:309) 
    04-27 12:54:23.014: E/Parcel(9257):  at java.lang.Class.forName(Class.java:273) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readParcelableCreator(Parcel.java:2281) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readParcelable(Parcel.java:2245) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readValue(Parcel.java:2152) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readListInternal(Parcel.java:2526) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readList(Parcel.java:1661) 
    04-27 12:54:23.014: E/Parcel(9257):  at hu.mycomp.myapp.modul.RegattaUnit.<init>(RegattaUnit.java:58) 
    04-27 12:54:23.014: E/Parcel(9257):  at hu.mycomp.myapp.RegattaUnit.<init>(RegattaUnit.java:14) 
    04-27 12:54:23.014: E/Parcel(9257):  at hu.mycomp.myapp.RegattaUnit$1.createFromParcel(RegattaUnit.java:113) 
    04-27 12:54:23.014: E/Parcel(9257):  at hu.mycomp.myapp.RegattaUnit$1.createFromParcel(RegattaUnit.java:110) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readParcelable(Parcel.java:2252) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readValue(Parcel.java:2152) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.BaseBundle.getString(BaseBundle.java:918) 
    04-27 12:54:23.014: E/Parcel(9257):  at hu.mycomp.myapp.service.GpsService.onStartCommand(GpsService.java:117) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2894) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.app.ActivityThread.access$2100(ActivityThread.java:151) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1401) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Handler.dispatchMessage(Handler.java:102) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.os.Looper.loop(Looper.java:135) 
    04-27 12:54:23.014: E/Parcel(9257):  at android.app.ActivityThread.main(ActivityThread.java:5254) 
    04-27 12:54:23.014: E/Parcel(9257):  at java.lang.reflect.Method.invoke(Native Method) 
    04-27 12:54:23.014: E/Parcel(9257):  at java.lang.reflect.Method.invoke(Method.java:372) 
    04-27 12:54:23.014: E/Parcel(9257):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    04-27 12:54:23.014: E/Parcel(9257):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    04-27 12:54:23.014: E/Parcel(9257): Caused by: java.lang.ClassNotFoundException: Didn't find class "hu.mycomp.myapp.modul.RaceDayUnit" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
    04-27 12:54:23.014: E/Parcel(9257):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    04-27 12:54:23.014: E/Parcel(9257):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
    04-27 12:54:23.014: E/Parcel(9257):  at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
    04-27 12:54:23.014: E/Parcel(9257):  ... 28 more 
    04-27 12:54:23.014: E/Parcel(9257):  Suppressed: java.lang.ClassNotFoundException: hu.mycomp.myapp.modul.RaceDayUnit 
    04-27 12:54:23.014: E/Parcel(9257):   at java.lang.Class.classForName(Native Method) 
    04-27 12:54:23.014: E/Parcel(9257):   at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
    04-27 12:54:23.014: E/Parcel(9257):   at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
    04-27 12:54:23.014: E/Parcel(9257):   at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
    04-27 12:54:23.014: E/Parcel(9257):   ... 29 more 
    04-27 12:54:23.014: E/Parcel(9257):  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 
    04-27 12:54:23.015: D/AndroidRuntime(9257): Shutting down VM 
    04-27 12:54:23.021: E/AndroidRuntime(9257): FATAL EXCEPTION: main 
    04-27 12:54:23.021: E/AndroidRuntime(9257): Process: hu.mycomp.myapp, PID: 9257 
    04-27 12:54:23.021: E/AndroidRuntime(9257): java.lang.RuntimeException: Unable to start service [email protected] with Intent { flg=0x4 cmp=hu.mycomp.myapp/.service.GpsService (has extras) }: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: hu.mycomp.myapp.modul.RaceDayUnit 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2911) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.app.ActivityThread.access$2100(ActivityThread.java:151) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1401) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Handler.dispatchMessage(Handler.java:102) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Looper.loop(Looper.java:135) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.app.ActivityThread.main(ActivityThread.java:5254) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at java.lang.reflect.Method.invoke(Native Method) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at java.lang.reflect.Method.invoke(Method.java:372) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    04-27 12:54:23.021: E/AndroidRuntime(9257): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: hu.mycomp.myapp.modul.RaceDayUnit 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readParcelableCreator(Parcel.java:2295) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readParcelable(Parcel.java:2245) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readValue(Parcel.java:2152) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readListInternal(Parcel.java:2526) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readList(Parcel.java:1661) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at hu.mycomp.myapp.modul.RegattaUnit.<init>(RegattaUnit.java:58) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at hu.mycomp.myapp.modul.RegattaUnit.<init>(RegattaUnit.java:14) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at hu.mycomp.myapp.modul.RegattaUnit$1.createFromParcel(RegattaUnit.java:113) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at hu.mycomp.myapp.modul.RegattaUnit$1.createFromParcel(RegattaUnit.java:110) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readParcelable(Parcel.java:2252) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readValue(Parcel.java:2152) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.os.BaseBundle.getString(BaseBundle.java:918) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at hu.mycomp.myapp.service.GpsService.onStartCommand(GpsService.java:117) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2894) 
    04-27 12:54:23.021: E/AndroidRuntime(9257):  ... 9 more 

回答

3

,而不是传递在nullreadList()作为第二个参数,通过在具有RaceUnitClassLoader。如果RegattaUnitRaceUnit都在相同的应用程序和DEX文件getClass().getClassLoader()RaceUnit.class.getClassLoader()应该工作。

(现在我想知道什么帆船赛的SI单位实际上是... :-)

+0

Ok @commonsware,但是如果我的班级没有任何属性列表,那么只有原始数据类型,并且仍然出现与Adam – AlexSanchez

+0

@AlexSanchez相同的错误:我建议您提出一个新的Stack Overflow问题,在那里你提供一个[mcve],你的代码和你的堆栈跟踪。 – CommonsWare

+0

[这里](http://stackoverflow.com/q/38538751/1067450)是你建议的问题。 – AlexSanchez

-1

它说ClassNotFoundException的,所以大概RaceDayUnit类不是在你的类路径中。检查hu.mycomp.myapp.modul软件包是否在您的源码包中?