我要做的是通过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”,甚至不知道如何开始这样做。作为旁注,成分和步骤不是复杂的类:
public class Ingredient {
String mName;
int mValue;
String mMeasurement;
...
}
public class Step {
int mIndex;
String task;
Date time;
...
}
长话短说,我不知道我在做什么,可以使用一些指导。我已经阅读了很多关于如何序列化简单类的内容,但它们并没有真正起作用。
编辑:包括错误即时获取,只是imeplementing 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
以上是“FATAL EXCEPTION:main”之后显示的行
然后我有很多错误只是说“在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的新手
答案 0 :(得分:3)
除非您无法避免,否则在通过Intents发送数据时不应使用Serializable(由于性能问题)。您应该实现Parcelable接口。这里有很多东西,但它实际上非常简单,除非你有一个极其复杂的课程。您还可以在子类上实现Parcelable,然后只使用writeParcelableArray()
作为您的成分和步骤列表。
答案 1 :(得分:1)
您无需覆盖方法。实现接口应该足够了。您没有准确指出哪些不起作用,但只要您尝试序列化的对象具有可序列化的数据,复杂性就不应成为问题。
答案 2 :(得分:1)
我遇到了类似的问题。经过漫长而乏味的调试后,我意识到所有将其实例用作成员变量的类都要被序列化。因此,在您的情况下,类Ingredient
和类Step
也需要与类Recipe
一起序列化。我希望这会有所帮助:)
答案 3 :(得分:0)
您无需执行任何操作。只是声明“实现Serializable”可以使类的实例可序列化。 如文档中所述(http://developer.android.com/reference/java/io/Serializable.html)“实现此接口足以使大多数类可序列化。”
答案 4 :(得分:0)
我认为这取决于应用程序的上下文。 Parcelable是一个选项,但其他应用程序实现ContentProvider并在Intent中传递URL或id,然后用于在ContentProvider中查找项目。