0

我對android很陌生,試圖使用SQLite實現內容提供者。從我的查詢方法返回的遊標必須使用套接字發送到另一個應用程序實例。要發送數據,我試圖封裝一個遊標對象在一個可序列化的類中,然後我寫入到我的objectOutputStream中,後來我發現它不起作用。製作Android光標可串行化

我一直在閱讀關於Parcelable,這看起來有點複雜,我能想到的唯一選擇是從我的光標中創建一個HashMap。

有沒有更好的方法呢? 任何幫助將不勝感激。

+0

如果你有一個ContentProvider,你可以發送帶有參數的內容URL,然後在目標應用程序中重新運行查詢嗎? – 2015-03-31 01:08:44

+0

這不需要應用程序在同一設備上嗎?我的應用程序需要將數據發送到另一臺設備上運行的同一應用程序的實例。 – Rohit 2015-03-31 03:03:42

+0

哦!你沒有提到不同的設備(雖然呃,我應該從你對套接字的引用中想到這一點)。 – 2015-03-31 14:05:42

回答

1

如果我必須這樣做,我只需循環遊標,讀取所有數據,將其序列化爲JSON,將其寫入套接字並在一天內調用它。

現在,如果你是那些有受虐狂傾向的程序員之一,我可以提供一個替代方案。考慮到當您使用ContentProviderContentResolver時,遊標數據將被序列化,以便它可以從一個進程移動到另一個進程。這個主要類是CursorWindow,事實證明這是一個Parcelable。當應用程序循環顯示光標時,光標驅動程序將填充CursorWindow s的數據,並將數據發送到應用程序並返回給應用程序。你可以可能能夠讓整個機制跨套接字工作。您需要對AbstractWindowedCursor班級及其所有朋友進行一點逆向工程,以瞭解詳細信息。例如,有一個CrossProcessCursorWrapper類可能對您有所幫助。

但是,請注意,您將會步入雷區。我從來不需要通過服務(即跨進程)進入數據訪問的內部,所以我不知道所有可以隱藏錯誤的地方。 Cursor不需要同步; Cursor的用戶必須處理所有線程安全。 SQLiteCursor有本地資源,CursorWindow有一些類型的內部引用計數,所以你必須確保你在正確的時間做所有正確的事情,以便沒有任何泄漏。使用兩個不同設備上的應用程序可能存在UID /權限問題。

所以我絕對認爲這是可行的,但對我?我沒有時間對所有這些東西進行分類。我會堅持我的穴居人JSON代碼,非常感謝你。

+0

我嘗試使用CursorWindow類,但是我一直在遇到同步問題,所以我也要用JSON方法。非常感謝你的幫助 – Rohit 2015-03-31 20:06:27