使Android游标可序列化

时间:2015-03-30 20:40:36

标签: android android-contentprovider android-cursor serializable

我对android很新,并尝试使用SQLite实现内容提供程序。从我的查询方法返回的光标必须使用套接字发送到另一个app实例。

为了发送数据,我试图将一个游标对象封装在一个可序列化的类中,然后我写入我的objectOutputStream,我后来发现它不起作用。

我一直在阅读有关Parcelable的内容,这看起来有点复杂,我能想到的唯一选择就是从光标中构建一个HashMap。

有没有更好的方法呢? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果我必须这样做,我只需循环遍历游标,读取所有数据,将其序列化为JSON,将其写入套接字,并在一天内调用它。

现在如果你是那些有自虐倾向的程序员之一,我可以提供另一种选择。请注意,当您使用ContentProviderContentResolver时,游标数据会被序列化,以便它可以从一个进程移动到另一个进程。主要类是CursorWindow,结果是Parcelable。当应用程序循环通过游标时,游标的驱动程序会将CursorWindow s填充数据,这些数据会被分配并发送回应用程序。您可能能够使整个机制在套接字上工作。你需要对AbstractWindowedCursor类及其所有朋友进行一些逆向工程来计算细节。例如,有一个CrossProcessCursorWrapper类可能对您有所帮助。

但请注意,您将走进雷区。我从来没有必要通过服务(即跨进程)进入数据访问的内部,所以我不知道错误可以隐藏的所有地方。 Cursor不需要同步; Cursor的用户必须处理所有线程安全。 SQLiteCursor具有本机资源,CursorWindow具有某种类型的内部引用计数,因此您必须确保在正确的时间执行所有正确的操作,以便不会泄漏任何内容。对于两个不同设备上的应用程序,可能存在UID /权限问题。

所以我绝对认为这是可行的,但对我来说呢?我没有时间整理所有这些东西。我会坚持我的穴居人JSON代码,非常感谢你。

相关问题