![](/img/trans.png)
[英]Using Java records for (de-)serializing complex/nested objects to JSON
[英]Serializing Complex Objects on Android (Java)
我想做的是通过Intents发送对象; 我一直在像这样实现Serializable:
Intent viewRecipe = new Intent(t, RecipeView.class);
Bundle input = new Bundle();
input.putSerializable("myRecipe", recipes.ReturnRecipe(position).toString());
viewRecipe.putExtras(input);
startActivity(viewRecipe);
但是,我正在猜测,因为我有一个复杂的类,它无法正常工作。 谁能帮忙解释一下我将如何将此对象转换为序列化字符串? 如果您知道一种更简单的方法,也将有所帮助; 也许还值得一提的是,我计划将其与SQL数据库进一步集成,但此刻我陷入了困境。
该类是:
public class Recipe implements Serializable {
int mRating;
String mName;
String mDescription;
ArrayList<Ingredient> ingredients;
ArrayList<Step> instructions;
...
}
我不确定是否必须覆盖“ readObject”和“ writeObject”,或者甚至我将如何开始这样做。 附带说明一下,Ingredient和Step不是复杂的类:
public class Ingredient {
String mName;
int mValue;
String mMeasurement;
...
}
public class Step {
int mIndex;
String task;
Date time;
...
}
简而言之,我不知道自己在做什么,可以使用一些指导。 我已经对如何序列化简单的类有一定的了解,但是它们并没有真正的帮助。
编辑:包括错误即时获取,只是当我从第二个主动性中检索对象时,只是实现Serilizable就让我收到此错误。
Intent myIntent = getIntent();
Bundle extras = myIntent.getExtras(); //breaks on this line
currentRecipe = (Recipe) extras.get("myRecipe");
02-29 15:15:56.521: E/AndroidRuntime(534): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pocket.recipes/com.pocket.recipes.RecipeView}: java.lang.ClassCastException: java.lang.String cannot be cast to com.pocket.recipes.Recipe
上方是“致命异常:主”之后显示的行
然后我有很多错误,只说“在android.app ....”
我那里也有这行:
02-29 15:15:56.521: E/AndroidRuntime(534): Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to com.pocket.recipes.Recipe
抱歉,我是Java / Android新手
除非无法避免,否则在通过Intents发送数据时(由于性能问题),不应使用Serializable。 您应该改为实现Parcelable接口。 有很多问题,但实际上非常简单,除非您的类非常复杂。 您还可以在子类上实现writeParcelableArray()
,然后仅对成分和步骤列表使用writeParcelableArray()
。
我有类似的问题。 经过冗长乏味的调试,我意识到所有实例都将用作成员变量的类都将被序列化。 因此,在您的情况下,类Ingredient
和Step
以及类Recipe
也需要序列化。 我希望这有帮助 :)
您不需要重写方法。 实现接口应该足够了。 您没有确切指定什么不起作用,但是只要您要序列化的对象具有可序列化的数据,复杂性就不会成为问题。
您无需执行任何操作。 只需声明“实现Serializable”即可使该类的实例可序列化。 如文档(http://developer.android.com/reference/java/io/Serializable.html)中所述,“实现此接口足以使大多数类可序列化。”
我认为这取决于应用程序的上下文。 可打包是一种选择,但是其他应用程序实现ContentProvider并在Intent中传递URL或ID,然后将其用于在ContentProvider中查找项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.