Parcelable中的readStringArray方法如何使用?

13

我的大部分Parcelable都正常工作;像 out.writeString,out.writeInt,in.readString() 等简单的操作都完美运行。

我的问题是当我想要将一个数组/List/ArrayList打包时(我已经尝试过它们所有的形式)。

我目前正在尝试使用:

List<String>

并且

out.writeStringList()
工作得很好。
Eclipse建议有一个

缺失。
in.readStringList(List<String> list)

想要读取那些数据,但是我读不出来。

我们应该把什么放在括号里面?

我尝试过什么都不放,结果显示'Add argument to match...'。我还尝试了null和getter引用等其他方法,但它们都返回错误'cannot convert from void to List'。

2个回答

25

写入包裹:

out.writeStringList(yourStringList);

从包裹中读取

List<String> newList = in.createStringArrayList();

24

'不能将void转换为List'

从这个错误信息来看,似乎您正在尝试将方法readStringList(...)的返回类型分配给一个List<T>变量。换句话说,您是否正在编写类似以下内容的代码:

List<String> stringList = in.readStringList(stringList)

? readStringList(...) 的返回类型是 void,这可能是 Eclipse 抱怨的原因。你实际上不应该尝试从 void 方法中获取返回类型 - 在这种情况下,你需要将结果分配给一个参数作为变量。因此,以下代码应该就足够了:

List<String> stringList = null;
in.readStringList(stringList)

顺便提一句,如果你想要通过 Intent 在 Activity 之间传递相对简单的数据对象,并实现 Parcelable 接口,请考虑使用 Serializable 接口代替——这会节省你大量的工作,特别是如果你需要为多个对象重复执行同样的过程。


这就是了,谢谢。与String或Integer不同,在那里你会写x=in.readString(),你需要交换它,所以它是in.readStringList(x) - 其中x是你之前创建的List<String>。我知道Parcelable设置更多工作,但从我读到的内容来看,它的性能超过Serializable。再次感谢。 - DaveSav
清理工作:以前它能够运行,然后我“清理了我的代码”,之后它就无法运行了。如果您也遇到了同样的问题,请查看http://idlesun.wordpress.com/2011/07/15/android-parcelable-example-2-sub-object-and-list/上的答案和代码。 - DaveSav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接