gpt4 book ai didi

android - 使 ArrayList> 可打包

转载 作者:行者123 更新时间:2023-11-30 02:19:58 24 4
gpt4 key购买 nike

我正在尝试使以下类可打包。通常,我通过使用 parcelabler 网站来执行此操作。但是该网站的 ArrayList> 部分似乎有问题。有谁知道如何正确地做到这一点?提前致谢!

package com.example.stoos.data;

import java.util.ArrayList;

import android.os.Parcel;
import android.os.Parcelable;

public class DataModelDiagrammDaten implements Parcelable {
ArrayList<String> Antworten = new ArrayList<String>();
ArrayList<ArrayList<Integer>> AntwortIDs = new ArrayList<ArrayList<Integer>>();

public ArrayList<String> getAntworten() {
return Antworten;
}

public ArrayList<ArrayList<Integer>> getAntwortIDs() {
return AntwortIDs;
}

public void setAntworten(ArrayList<String> antworten) {
Antworten = antworten;
}

public void setAntwortIDs(ArrayList<ArrayList<Integer>> antwortIDs) {
AntwortIDs = antwortIDs;
}

public DataModelDiagrammDaten(ArrayList<String> antworten,
ArrayList<ArrayList<Integer>> antwortIDs) {
super();
Antworten = antworten;
AntwortIDs = antwortIDs;
}



protected DataModelDiagrammDaten(Parcel in) {
if (in.readByte() == 0x01) {
Antworten = new ArrayList<String>();
in.readList(Antworten, String.class.getClassLoader());
} else {
Antworten = null;
}
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
if (Antworten == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(Antworten);
}
}

@SuppressWarnings("unused")
public static final Parcelable.Creator<DataModelDiagrammDaten> CREATOR = new Parcelable.Creator<DataModelDiagrammDaten>() {
@Override
public DataModelDiagrammDaten createFromParcel(Parcel in) {
return new DataModelDiagrammDaten(in);
}

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

最佳答案

我觉得有点晚了,但希望它对其他人仍然有用。我尝试像这样将二维数组写入 Parcel:

public class Avatar implements Parcelable {

ArrayList<Integer> arrayList;
ArrayList<ArrayList<Integer>> arrayLists;

public Avatar() {
arrayLists = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ArrayList<Integer> temp = new ArrayList<>();
for (int j = 0; j < 10; j++) {
temp.add(j);
}
arrayLists.add(temp);
}

arrayList = new ArrayList<>();
for (int i = 100; i < 104; i++) {
arrayList.add(i);
}
}

protected Avatar(Parcel in) {
arrayList = new ArrayList<>();
in.readList(arrayList, Integer.class.getClassLoader());
arrayLists = new ArrayList<>();
in.readList(arrayLists, ArrayList.class.getClassLoader());
}

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

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

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

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(arrayList);
dest.writeList(arrayLists);
}

@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < arrayList.size(); i++) {
stringBuilder.append(arrayList.get(i) + " ");
}
for (int i = 0; i < arrayLists.size(); i++) {
for (int j = 0; j < arrayLists.get(i).size(); j++) {
stringBuilder.append(arrayLists.get(i).get(j) + " ");
}
}
return stringBuilder.toString();
}
}

并将类发送到另一个 Activity :

   avatar = new Avatar();
Intent intent = new Intent();
intent.setClass(ParcelActivity.this, Parcel2Activity.class);
intent.putExtra("avatar", avatar);
startActivity(intent);

在另一个 Activity 中接收:

textView.setText(getIntent().getParcelableExtra("avatar") + "");

它工作正常: test

需要注意的是,Parcel中字段对象的写入和读取必须顺序一致。

关于android - 使 ArrayList<ArrayList<Integer>> 可打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720200/

24 4 0