簡體   English   中英

傳遞可包裹對象的ArrayList時出錯

[英]Error passing ArrayList of parcelable object

我在Android Studio上的應用中嘗試在活動之間傳遞可包裹對象的ArrayList時遇到一個奇怪的錯誤。 可以傳遞objet任務,但不能通過putParcelableArrayListExtra傳遞任務的ArrayList。 我有這個錯誤

02-10 20:27:46.567: E/AndroidRuntime(12683): java.lang.RuntimeException: Parcel android.os.Parcel@9d0525e8: Unmarshalling unknown type code 2097253 at offset 128
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.os.Parcel.readValue(Parcel.java:2080)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.os.Parcel.readListInternal(Parcel.java:2343)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.os.Parcel.readArrayList(Parcel.java:1703)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.os.Parcel.readValue(Parcel.java:2034)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.os.Bundle.unparcel(Bundle.java:249)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.os.Bundle.getParcelableArrayList(Bundle.java:1250)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at android.content.Intent.getParcelableArrayListExtra(Intent.java:4680)
02-10 20:27:46.567: E/AndroidRuntime(12683):    at com.example.augus.tp2.NewActivity$1.onClick(NewActivity.java:51)

這是我的課堂任務:

public class Task implements Parcelable {
public String nom;
private int duree;
private String description;
private String categorie;

public Task(String nom, int duree, String description, String categorie){
    this.nom=nom;
    this.duree=duree;
    this.description=description;
    this.categorie=categorie;

}


protected Task(Parcel in) {
    nom = in.readString();
    duree = in.readInt();
    description = in.readString();
    categorie = in.readString();
}

public static final Creator<Task> CREATOR = new Creator<Task>() {
    @Override
    public Task createFromParcel(Parcel in) {
        return new Task(in);
    }

    @Override
    public Task[] newArray(int size) {
        return new Task[size];
    }
};

public String getNom(){
    return this.nom;
}

public String getCategorie(){
    return this.categorie;
}

public int getDuree(){
    return this.duree;
}

public String getDescription(){
    return this.description;
}


@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(nom);
    dest.writeString(description);
    dest.writeInt(duree);
    dest.writeString(categorie);
}
}

這是函數OnClick傳遞ArrayList

 public void onClick(View v) {

            Intent secondActivity = new Intent(MainActivity.this, NewActivity.class);

            ArrayList<Task> list=new ArrayList<Task>();
            list.add(task1);
            list.add(task2);
            list.add(task3);
            list.add(task4);
            list.add(task5);
            list.add(task6);
            list.add(task7);
            secondActivity.putParcelableArrayListExtra("task",list);
            startActivity(secondActivity);
        }

這是接收ArrayList的函數

Intent secondeActivite = new Intent(NewActivity.this, MainActivity2.class);
            String activitenom = nom.getText().toString();
            String activitedescription=description.getText().toString();
            String activitecategorie=categorie.getText().toString();
            Intent i = getIntent();
            Task tache=new Task(activitenom,10,activitedescription,activitecategorie);

            ArrayList<Task> tacheliste=i.getParcelableArrayListExtra("task");

謝謝您的幫助

Task(Parcel in)writeToParcel中的元素順序必須相同。 dureedescription需要的方法之一被交換。

Sorry the code is in `kotlin`

constructor(source: Parcel) : this(
        source.readString(),
        source.readInt(),
        source.readString(),
        source.readString()
)

override fun describeContents() = 0

override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
    writeString(nom)
    writeInt(duree)
    writeString(description)
    writeString(categorie)
}

順序應該一樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM