2015-04-27 2 views
0

Im пытается передать объекты между фрагментами, и я использую Parcelable интерфейс.Класс не найден, когда unmarshalling

Вот мой класс, но что-то напутал с ArrayList собственности, я получил:

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

и мой класс имеет ArrayList из RaceDayUnits. Все работало правильно, пока я не начал использовать 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

Вместо того, переходящая в null к readList() в качестве второго параметра, проходят в ClassLoader, который имеет RaceUnit. Если RegattaUnit и RaceUnit находятся в одном приложении и файле DEX, getClass().getClassLoader() или RaceUnit.class.getClassLoader() должны работать.

(и теперь я задаюсь вопросом, что единица СИ регаты на самом деле ... :-)

+0

Ok @commonsware, но что, если у меня нет списка свойств в моем классе, есть только примитивные типы данных и по-прежнему имеют ту же ошибку, что и у Адама – AlexSanchez

+0

@AlexSanchez: Я рекомендую вам задать новый вопрос о переполнении стека , где вы предоставляете [mcve], с кодом и трассировкой стека. – CommonsWare

+0

[Здесь] (http://stackoverflow.com/q/38538751/1067450) - вопрос, который вы предложили. – AlexSanchez

-1

Это говорит ClassNotFoundException, так что, вероятно RaceDayUnit класс не в вашем пути к классам. Есть ли у вас пакет hu.mycomp.myapp.modul в вашем исходном пакете?

Смежные вопросы