2011-04-08 53 views
7

我有兩段需要從外部應用程序訪問並存儲的數據。根據文檔ContentProviders是唯一可能的方式,但它也提到了外部存儲。 ContentProviders實現了一個類似數據庫的「接口」,對於兩段數據使用數據庫是非常不必要的。我寧願將它們保存到一個文件中,但通過實現抽象方法來使用ContentProvider是有問題的,因爲這些方法的結構是數據庫查詢。ContentProvider without SQL

我知道沒有任何內容指定ContentProviders必須使用下面的數據庫來存儲數據,但是有沒有其他方法來存儲必須共享到文件系統的最小數量的數據?

回答

6

我剛用MatrixCursor來解決確切的問題。看看它。

編輯:對不起,我剛剛掃描了問題,當我回答它。 ContentProvider是應用程序共享數據的唯一方式。對於較小的數據,應用程序中的活動可以使用SharedPreferences,並增加持久性。

編輯v2:以下是我用於爲我的ContentProvider的查詢函數填充MatrixCursor的函數。我使用的是我創建的預定義VIEW,它返回一組不同的值,並設置一個帶有_ids的遊標,我可以將其傳遞給我的ExpandableListView。

private Cursor getFactions() { 
     MatrixCursor mc = new MatrixCursor(Model.Faction.PROJECTION); 
     SQLiteDatabase db = dbHelper.getReadableDatabase(); 
     Cursor c = db.query(MODELFACTION_TABLE_NAME, new String[] { Model.Faction.FACTION }, null, null, null, null, Model.Faction.FACTION + " ASC"); 
     c.moveToFirst(); 
     do { 
      mc.addRow(new Object[] { c.getPosition(), c.getString(c.getColumnIndex(Model.Faction.FACTION))});    
     } while (c.moveToNext() && ! c.isAfterLast()); 
     c.close(); 
     db.close(); 
     return mc; 
    } 
+0

嗯,我需要,所以我想我需要ContentProviders應用程序之間共享數據。由於存儲對象的能力,MatrixCursor看上去很有希望,但我認爲MatrixCursor需要某個數據庫支持。 – 2011-04-10 04:26:05

+0

完全沒有!我剛剛創建了MatrixCursor,並添加了這些元素。沒有分貝需要。當你實例化一個MatrixCursor時,你提供一個String []字段名或列名,然後只需添加數據集或行。你從哪裏得到這些數據完全取決於你。 – 2011-04-10 05:28:06

+1

使用下面的標準文件輸入/輸出的矩陣光標結束。然後使用ContentResolver.query()讀取信息並將其存儲在遊標中。謝謝您的幫助! – 2011-04-14 20:38:14

1

SharedPreferences類提供了一個總體框架,使您可以保存和檢索的原始數據類型的持久鍵 - 值對。您可以使用SharedPreferences保存所有的原始數據:布爾整數多頭,並。這些數據將跨用戶會話(即使你的應用程序被殺害)

有用的鏈接仍然存在:

http://developer.android.com/reference/android/content/SharedPreferences.html

http://developer.android.com/guide/topics/data/data-storage.html