使 Android 游标可序列化
Making Android Cursor Serializable
我对 android 很陌生,正在尝试使用 SQLite 实现内容提供程序。从我的查询方法返回的游标必须使用套接字发送到另一个应用程序实例。
为了发送数据,我尝试将游标对象封装在可序列化的 class 中,然后将其写入我的对象输出流,后来我发现它不起作用。
我一直在阅读有关 Parcelable 的文章,它似乎有点复杂,我能想到的唯一替代方法是用我的光标构建一个 HashMap。
有什么更好的办法吗?
任何帮助将不胜感激。
如果我必须这样做,我会循环遍历游标,读取所有数据,将其序列化为 JSON,将其写入套接字,然后收工。
现在如果你是那些有受虐倾向的程序员之一,我可以提供一个替代方案。考虑到当您使用 ContentProvider
到 ContentResolver
时,游标数据被序列化,因此它可以从一个进程移动到另一个进程。主要的 class 是 CursorWindow
,结果是 Parcelable
。当应用程序循环游标时,游标的驱动程序会用数据填充 CursorWindow
s,这些数据会被打包并发送回应用程序。您可能 能够使整个机制在一个套接字上工作。您将不得不对 AbstractWindowedCursor
class 及其所有朋友进行一些逆向工程以计算出细节。例如,有一个 CrossProcessCursorWrapper
class 可能对您有帮助。
但是,请注意您将步入雷区。我从来不必通过服务(即跨进程)进入数据访问的内部,所以我不知道错误可能隐藏的所有地方。 Cursor
不需要同步; Cursor
的用户必须注意所有线程安全。 SQLiteCursor
s 有本地资源,CursorWindow
有某种类型的内部引用计数,所以你必须确保你在正确的时间做所有正确的事情,这样就不会泄漏任何东西。在两个不同的设备上使用应用程序可能会出现 UID/permissions 个问题。
所以我绝对认为这是可行的,但对我来说呢?我没有时间整理所有这些东西。我会坚持我的穴居人 JSON 代码,非常感谢。
我对 android 很陌生,正在尝试使用 SQLite 实现内容提供程序。从我的查询方法返回的游标必须使用套接字发送到另一个应用程序实例。
为了发送数据,我尝试将游标对象封装在可序列化的 class 中,然后将其写入我的对象输出流,后来我发现它不起作用。
我一直在阅读有关 Parcelable 的文章,它似乎有点复杂,我能想到的唯一替代方法是用我的光标构建一个 HashMap。
有什么更好的办法吗? 任何帮助将不胜感激。
如果我必须这样做,我会循环遍历游标,读取所有数据,将其序列化为 JSON,将其写入套接字,然后收工。
现在如果你是那些有受虐倾向的程序员之一,我可以提供一个替代方案。考虑到当您使用 ContentProvider
到 ContentResolver
时,游标数据被序列化,因此它可以从一个进程移动到另一个进程。主要的 class 是 CursorWindow
,结果是 Parcelable
。当应用程序循环游标时,游标的驱动程序会用数据填充 CursorWindow
s,这些数据会被打包并发送回应用程序。您可能 能够使整个机制在一个套接字上工作。您将不得不对 AbstractWindowedCursor
class 及其所有朋友进行一些逆向工程以计算出细节。例如,有一个 CrossProcessCursorWrapper
class 可能对您有帮助。
但是,请注意您将步入雷区。我从来不必通过服务(即跨进程)进入数据访问的内部,所以我不知道错误可能隐藏的所有地方。 Cursor
不需要同步; Cursor
的用户必须注意所有线程安全。 SQLiteCursor
s 有本地资源,CursorWindow
有某种类型的内部引用计数,所以你必须确保你在正确的时间做所有正确的事情,这样就不会泄漏任何东西。在两个不同的设备上使用应用程序可能会出现 UID/permissions 个问题。
所以我绝对认为这是可行的,但对我来说呢?我没有时间整理所有这些东西。我会坚持我的穴居人 JSON 代码,非常感谢。