putExtraを使用して、Activity1からActivity2に自分のデータを送信したいとします。Serializable SparseArray <カスタムオブジェクト>
私のカスタムオブジェクトはSerializableを実装:
public class ARObjectCategory implements Serializable {
private static final long serialVersionUID = 3128594851129501738L;
public int id;
public String name;
public transient ARObjectCategory parent;
public transient SparseArray<ARObjectCategory> children;
public transient Bitmap iconBitmap = null;
public String icon;
private boolean active = false;
public ARObjectCategory(int id, String name, ARObjectCategory parent) {
this.id = id;
this.name = name;
this.parent = parent;
this.children = new SparseArray<>();
}
public void addChild(ARObjectCategory child) {
children.append(child.id, child);
if (getActive())
child.setActive(true);
}
public final ARObjectCategory getChild(int index) {
return children.valueAt(index);
}
public final SparseArray<ARObjectCategory> getChildren() {
return this.children;
}
public final int getParentLast() {
ARObjectCategory parentTemp = this.parent;
while (parentTemp.parent != null) {
parentTemp = parentTemp.parent;
}
return parentTemp.id;
}
public final ARObjectCategory getChildById(int id) {
return children.get(id, null);
}
public final int getChildrenCount() {
return children.size();
}
public Boolean getActive() {
return this.active;
}
public void setActive(Boolean bool) {
this.active = bool;
}
public Bitmap getIconBitmap() {
return iconBitmap;
}
public void setIconBitmap(Bitmap iconBitmap) {
this.iconBitmap = iconBitmap;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
}
Activity1.java(送信者):デバッグモードで
ARObjectCategory test1= adapter.getItem(position);
Intent subCat= new Intent(getActivity(), SubCategoriesActivity.class);
subCat.putExtra("test",test1);
subCat.putExtra("selected",position);
startActivity(subCat);
私のオブジェクトは大丈夫に見えます。 SpraseArrayはAROjcectCategoryのオブジェクトを取得しました。
Activity2.java(レシーバ):
Bundle extras = getIntent().getExtras();
if (extras != null) {
int selected = extras.getInt("selected", -1);
ARObjectCategory list = (ARObjectCategory) extras.getSerializable("test");
SparseArray<ARObjectCategory> lista = list.getChildren();
}
しかし、私はActivity2をデバッグします。私は私が私のオブジェクトから過渡を削除すると、子供の私のSpraseArrayが
最後にnullであることがわかります。
java.lang.RuntimeException:私は私のlogcatに次のエラーを取得しています
public transient ARObjectCategory parent; public transient SparseArray<ARObjectCategory> children;
Parcelableは、直列化可能なオブジェクト(名前= com.ethos.ar.core.ARObjectCategory)を書き込むにIOException に遭遇しました java.io.NotSerializableException:android.util.SparseArray ......
Wによって引き起こさ........
ハットはSpraseArrayを持つObjectを他のActivityに送る正しい方法です。
ヒント:Parcelableが動作していません。あなたがtransient修飾子を使用する場合
dest.writeParcelable(this.children);
SparseArray<ARObjectCategory> cannot be converted to SparseArray<Object>
おかげで