Android putSerializable vs putString
我有一个定义如下的POJO对象:Android putSerializable vs putString,android,android-intent,serializable,Android,Android Intent,Serializable,我有一个定义如下的POJO对象: public class MYPOJO implements Serializable { int myint; String mystring; } 然后,当我将信息传递给活动时,我会执行以下操作: Intent i = new Intent(this, WearActivity.class); Bundle b = new Bundle(); MYPojo pojo = new MYPojo();
public class MYPOJO implements Serializable {
int myint;
String mystring;
}
然后,当我将信息传递给活动时,我会执行以下操作:
Intent i = new Intent(this, WearActivity.class);
Bundle b = new Bundle();
MYPojo pojo = new MYPojo();
pojo.mystring="cool";
b.putSerializable("someString", pojo.mystring);//this line is my issue
i.putExtra("coolBundle",b);
startActivityForResult(i, 0);
要阅读“someString”,我需要:
Bundle b2 = getIntent().getBundleExtra("coolBundle");
b2.getString("someString");
那么现在我的问题是:如果我在最后仍然要求检索b2.getString(“someString”),那么如果我执行以下操作,真的有什么区别吗
vs
在实践中,除了“效率”或反射/安全性的可能使用之外,传递字符串和在活动之间传递可序列化字符串之间没有什么区别。这可能更像是我在将字符串作为“可序列化”传入时遇到的设计和原则问题。本质上,通过以可序列化的方式传入字符串,Android/Java将利用字符串包装器,它在幕后包含char[]的数据结构
TLDR;如果您的POJO包含更多数据,我强烈建议您实现Parcelable。更多信息可在此SO答案中找到。但是如果您只传递一个字符串,我将使用Android为我们提供的putString/getString方法。您的POJO可能应该实现Parcelable。我意识到为了提高效率和避免反射,它应该实现并行。但我想知道,如果我使用putString而不是putSerializable,是否有任何问题。只是我继承了一个不使用parcelable的项目,我想知道其中的设计决策。我看到他们调用putSerializable(…)并在那里通过getString(…)检索它,这看起来很奇怪,我想解释一下。没有崩溃,这两种方法似乎都能工作,但使用这两种方法是否有设计考虑?我相信您可以传入字符串,因为它本质上是一个字符数组,允许序列化。对我来说,把一个包装器放在一个字符串上就是把一个包装器放在一个包装器上。这听起来像是一种设计选择,我想我不会这么做的是,如果只传递一个字符串,请使用put/get string方法。如果要传递包含更多数据的POJO,请实现parcelable。Serializable可以工作,但看起来您已经意识到了效率/反射参数。如果需要,您可以发布一个官方答案供考虑。
b.putString("someString",pojo.mystring)
b.putSerializable("someString",pojo.mystring) ?