我想使用putExtra将我的数据从Activity1发送到Activity2。
我的自定义对象实现了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(Reciever):
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是空的
最后,当我从对象中移除瞬态时。
public transient ARObjectCategory parent;
public transient SparseArray<ARObjectCategory> children;
我在logcat上收到以下错误:
java.lang.RuntimeException:Parcelable遇到IOException 编写可序列化对象(name = com.ethos.ar.core.ARObjectCategory)........
引起: java.io.NotSerializableException:android.util.SparseArray ......
将具有SpraseArray的Object发送到其他Activity的正确方法是什么。
提示:Parcelable无效:
dest.writeParcelable(this.children);
SparseArray<ARObjectCategory> cannot be converted to SparseArray<Object>
由于
答案 0 :(得分:1)
使用transient修饰符时,该成员将从序列化过程中排除。这就是你得到一个空对象的原因。当你删除transient修饰符然后你收到一个异常,但为什么?那是因为&#34; SparseArray&#34;对象本身并没有实现&#34; Serializable&#34;接口。请记住,为了使对象可序列化,那么它的所有属性都必须实现&#34; Serializable&#34;接口。现在你能做什么?你应该实现&#34; Parcelable&#34; Android界面如何?如果您在使用&#34; SparseArray&#34;时遇到问题在parcelable过程中,你可以将它包裹到另一个对象,并重新创建原始&#34; SparseArray&#34;创建过程中的对象。