Android putSerializable 与 putString
Android putSerializable vs putString
我有一个定义如下的 POJO 对象:
public class MYPOJO implements Serializable {
int myint;
String mystring;
}
然后当我将信息传递给 activity 时,我这样做:
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") :
b.putString("someString",pojo.mystring)
对比
b.putSerializable("someString",pojo.mystring) ?
实际上,除了 "efficiency" 或 reflection/security 的可能用法之外,在活动之间传递字符串或传递可序列化字符串之间没有区别。这可能更多的是我在将字符串作为 "serializable" 传递时遇到的设计和原则问题。本质上,通过将 String 作为 Serializable 传递,Android/Java 将利用 String 的包装器,它在幕后包含 char[] 的数据结构。
TLDR;如果您的 POJO 包含更多数据,我强烈建议您实施 Parcelable。可以在这个 SO 答案 here 中找到更多信息。但是,如果您只传递一个字符串,我会使用 Android 为我们提供的 putString/getString 方法。
我有一个定义如下的 POJO 对象:
public class MYPOJO implements Serializable {
int myint;
String mystring;
}
然后当我将信息传递给 activity 时,我这样做:
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") :
b.putString("someString",pojo.mystring)
对比
b.putSerializable("someString",pojo.mystring) ?
实际上,除了 "efficiency" 或 reflection/security 的可能用法之外,在活动之间传递字符串或传递可序列化字符串之间没有区别。这可能更多的是我在将字符串作为 "serializable" 传递时遇到的设计和原则问题。本质上,通过将 String 作为 Serializable 传递,Android/Java 将利用 String 的包装器,它在幕后包含 char[] 的数据结构。
TLDR;如果您的 POJO 包含更多数据,我强烈建议您实施 Parcelable。可以在这个 SO 答案 here 中找到更多信息。但是,如果您只传递一个字符串,我会使用 Android 为我们提供的 putString/getString 方法。