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

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

我一直在阅读有关Parcelable的内容,这似乎有点复杂,我能想到的唯一替代方法是用光标构建HashMap。

有什么更好的办法吗? 任何帮助将不胜感激。

#1楼 票数:1 已采纳

如果必须这样做,我将遍历游标,读取所有数据,将其序列化为JSON,将其写入套接字,然后调用它。

现在,如果您是那些受虐狂的程序员之一,我可以提供一个替代方案。 请考虑当您通过ContentResolver使用ContentProvider ,游标数据已序列化,因此可以从一个进程移动到另一个进程。 它的主要类是CursorWindow ,事实证明它是一个Parcelable 当应用程序遍历游标时,游标的驱动程序会使用CursorWindow填充数据,这些数据将被CursorWindow并发送回应用程序。 也许可以使整个机制跨套接字工作。 您必须对AbstractWindowedCursor类及其所有朋友进行一些逆向工程,以得出详细信息。 例如,有一个CrossProcessCursorWrapper类可能对您有所帮助。

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

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

  ask by Rohit translate from so

未解决问题?本站智能推荐:

1回复

Android:按专辑搜索曲目时,MediaStore中的光标返回0

我正在尝试按当前保存在外部存储器上的专辑 ID 查找曲目列表。 获得有效的专辑 ID 后,只有当专辑有超过 1 首曲目时,我才能获取曲目列表。 这有点奇怪,所有带有单个曲目的专辑都返回 0 光标大小,其中应该至少有一个曲目。 如果专辑有超过 1 首曲目,则会成功接收曲目列表。 这是代码片段,
1回复

Android通过单个光标获取多个内容提供程序

大家好,我正在创建一个必须与多个内容提供者打交道的应用程序。 要获取所有内容,我必须创建一个游标。 例如,我创建一个游标以获取电话联系,然后创建另一个以获取通话记录等。我想知道是否有必要每次都创建一个新游标以获取内容。我想知道有什么方法可以用单光标,这样我的代码就会缩短。 提前致谢
2回复

通知光标更改而不更新ListView

我正在使用CursorAdapter填充ListView 。 我通过基本的CursorLoader获取Cursor ,该CursorLoader从ContentProvider中获取数据。 眼下,当Cursor在加载onLoadFinished我的LoaderCallbacks<Cur
1回复

如何使用光标将嵌入的插图嵌入音频文件中?

我正在开发一个非常小的音频播放器。 问题是:经过很多问题后,我设法用从外部存储器中任何文件夹中检索到的歌曲构建了一个ListView,并列出了它们的标题,艺术家和专辑名称。 现在我想在ListView中添加封面专辑。 封面必须取自歌曲音频文件中嵌入的图像。 我尝试使用MediaMeta
1回复

从Android中的MediaStore查询相册

我开发在android.I媒体的简单应用程序要查询的专辑上device.I可用的媒体是成功的检索唯一名字,当我在专辑DISTINCT关键字的名称来查询,但是我们也希望其他的数据,如当我查询多于1列时,album_art等会给出重复的值。 这是我的代码 请帮忙谢谢
1回复

Android的ContentProviderUri更改通知方案

假设我有这个UriMatcher(可在此处找到: http : //developer.android.com/reference/android/content/UriMatcher.html ): 我有通常的ContentProvider: 问题是,当我使用此Uri更新某些内容时:
2回复

Android:通过IM获取所有联系人

我想查询联系人内容提供商,以便联系人的 IM 类型等于“XYZ”。 我尝试了以下方法,但没有得到任何结果: 我没有收到带有上述代码的任何日志。 PS:我没有使用像 AIM、Windows Live、Yahoo 或 Skype 这样的内置协议。 它是我的自定义协议,说它“XYZ”。
1回复

AsyncTask和CursorLoader[Android]

我的AsyncTask用来提取数据很长,与此同时,在构造recyclerview的过程中,我想检查cursorloader是否能够正确地从我的内容提供程序中查询。 在这里onLoadFinished ,我使用了Loader Callbacks interface和onLoadFinished