Autore Topic: Unmarshalling non riuscito  (Letto 586 volte)

Offline und3r91

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu
Unmarshalling non riuscito
« il: 11 Ottobre 2013, 22:07:27 CEST »
0
Salve ragazzi, ho un problema nel passare un oggetto da un activity ad un'altra.

Questa è la classe:

Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.List;
 
import android.os.Parcel;
import android.os.Parcelable;
 
import com.fasterxml.jackson.annotation.JsonProperty;
 
public class Element implements Parcelable{
 
        @JsonProperty("id")
        int id;
        @JsonProperty("Text")
        String text;
        @JsonProperty("Children")
        List<Element> children;
        @JsonProperty("Min")
        String min;
        @JsonProperty("Value")
        String value;
        @JsonProperty("Max")
        String max;
        @JsonProperty("ImageURL")
        String imageURL;
 
        public Element()
        {
        }
       
    protected Element(Parcel in) {
        id = in.readInt();
        text = in.readString();
        children = new ArrayList<Element>();
        in.readList(children, null);
        min = in.readString();
        value = in.readString();
        max = in.readString();
        imageURL = in.readString();
    }
 
    public int describeContents() {
        return 0;
    }
 
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(text);
        dest.writeList(children);
        dest.writeString(min);
        dest.writeString(value);
        dest.writeString(max);
        dest.writeString(imageURL);
    }
 
    public static final Parcelable.Creator<Element> CREATOR = new Parcelable.Creator<Element>() {
        public Element createFromParcel(Parcel in) {
            return new Element(in);
        }
 
        public Element[] newArray(int size) {
            return new Element[size];
        }
    };
}

Dall'activity lancio la nuova così:

Codice (Java): [Seleziona]
                   
Intent i=new Intent(MainActivity.this,TabActivity.class);
i.putExtra("element",element);
startActivity(i);

uso MainActivity.this e non direttamente this perché sono in thread inline.

A questo punto nella TabActivity proprio sotto il setContentView faccio:
Codice (Java): [Seleziona]
Element e = getIntent().getParcelableExtra("element");che genera un errore, ecco il logcat completo:

Citazione
10-11 16:03:19.340: E/Parcel(1938): Class not found when unmarshalling: my.package.Element
10-11 16:03:19.340: E/Parcel(1938): java.lang.ClassNotFoundException: my.package.Element
10-11 16:03:19.340: E/Parcel(1938):    at java.lang.Class.classForName(Native Method)
10-11 16:03:19.340: E/Parcel(1938):    at java.lang.Class.forName(Class.java:204)
10-11 16:03:19.340: E/Parcel(1938):    at java.lang.Class.forName(Class.java:169)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readParcelableCreator(Parcel.java:2091)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readParcelable(Parcel.java:2055)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readValue(Parcel.java:1971)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readListInternal(Parcel.java:2264)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readList(Parcel.java:1537)
10-11 16:03:19.340: E/Parcel(1938):    at my.package.Element.<init>(Element.java:36)
10-11 16:03:19.340: E/Parcel(1938):    at my.package.Element$1.createFromParcel(Element.java:59)
10-11 16:03:19.340: E/Parcel(1938):    at my.package.Element$1.createFromParcel(Element.java:1)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readParcelable(Parcel.java:2062)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readValue(Parcel.java:1971)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Parcel.readMapInternal(Parcel.java:2255)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Bundle.unparcel(Bundle.java:223)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Bundle.getParcelable(Bundle.java:1170)
10-11 16:03:19.340: E/Parcel(1938):    at android.content.Intent.getParcelableExtra(Intent.java:4501)
10-11 16:03:19.340: E/Parcel(1938):    at my.package.TabActivity.onCreate(TabActivity.java:29)
10-11 16:03:19.340: E/Parcel(1938):    at android.app.Activity.performCreate(Activity.java:5133)
10-11 16:03:19.340: E/Parcel(1938):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
10-11 16:03:19.340: E/Parcel(1938):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
10-11 16:03:19.340: E/Parcel(1938):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-11 16:03:19.340: E/Parcel(1938):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-11 16:03:19.340: E/Parcel(1938):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 16:03:19.340: E/Parcel(1938):    at android.os.Looper.loop(Looper.java:137)
10-11 16:03:19.340: E/Parcel(1938):    at android.app.ActivityThread.main(ActivityThread.java:5103)
10-11 16:03:19.340: E/Parcel(1938):    at java.lang.reflect.Method.invokeNative(Native Method)
10-11 16:03:19.340: E/Parcel(1938):    at java.lang.reflect.Method.invoke(Method.java:525)
10-11 16:03:19.340: E/Parcel(1938):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-11 16:03:19.340: E/Parcel(1938):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-11 16:03:19.340: E/Parcel(1938):    at dalvik.system.NativeStart.main(Native Method)
10-11 16:03:19.340: E/Parcel(1938): Caused by: java.lang.NoClassDefFoundError: my/package/Element
10-11 16:03:19.340: E/Parcel(1938):    ... 32 more
10-11 16:03:19.340: E/Parcel(1938): Caused by: java.lang.ClassNotFoundException: Didn't find class "my.package.Element" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib]]
10-11 16:03:19.340: E/Parcel(1938):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
10-11 16:03:19.340: E/Parcel(1938):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
10-11 16:03:19.340: E/Parcel(1938):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
10-11 16:03:19.340: E/Parcel(1938):    ... 32 more

E' tutto il giorno che cerco di risolvere ma non ci sono riuscito, perciò mi affido a voi!


Post unito: 11 Ottobre 2013, 22:49:24 CEST
Ho risolto grazie ad un amico su IRC.
In pratica basta cambiare
Codice (Java): [Seleziona]
in.readList(children, null);in
Codice (Java): [Seleziona]
in.readList(children, getClass().getClassLoader());
« Ultima modifica: 11 Ottobre 2013, 22:49:25 CEST da und3r91, Reason: Merged DoublePost »