2011-04-08 13 views
7

Dış uygulamalardan erişilmesi ve depolanması gereken iki veriye sahibim. Belgelere göre ContentProviders mümkün olan tek yoldur, ancak harici depolamadan da bahseder. ContentProviders veritabanı benzeri bir "arayüz" uygular ve bir veritabanı kullanarak iki veri parçası için son derece gereksiz olur. Onları bir dosyaya kaydetmeyi tercih ederim, ancak soyut metodları uygulayarak ContentProvider kullanmak problemlidir çünkü yöntemler veritabanı sorguları olarak yapılandırılmıştır.SQL olmadan ContentProvider

ContentProviders'ın veri depolamak için bir veritabanı kullanması gerektiğini belirten hiçbir şey olmadığını biliyorum, ancak dosya sistemine paylaşılması gereken minimum miktarda veri depolamanın başka bir yolu var mı?

cevap

6

Bu sorunu çözmek için MatrixCursor kullanıyorum. Ona bir göz atın.

Düzenleme: Üzgünüm, soruyu yanıtladığımda yeni taranmıştım. ContentProvider, Uygulamaların verileri paylaşabilmesinin tek yoludur. Bir Uygulama içindeki aktiviteler, daha az veri için kalıcılık eklenmesiyle SharedPreferences'u kullanabilir.

Düzenleme v2: Burada, ContentProvider'ımın sorgu işlevi için bir MatrixCursor'u yerleştirmek için kullandığım işlev var. Farklı değerler kümesini döndüren önceden tanımlanmış bir VIEW kullanıyorum ve bu, ExpandableListView'uma iletebildiğim _ids ile bir imleci ayarlıyor.

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

Eh ben ContentProviders gerekecektir varsayalım böylece uygulamalar arasında veri paylaşımı için gereken . MatrixCursor, nesneleri saklama yeteneği nedeniyle ümit verici görünüyor ama MatrixCursor'un bir yerde bir DB tarafından desteklenmesi gerektiğini varsayalım mı? –

+0

Hiç de değil! MatrixCursor'u yeni oluşturdum ve öğeleri ekledim. Gerekli değil. Bir MatrixCursor'ı başlattığınızda, alan adlarının veya sütun adlarının bir String [] değerini sağlayın, ardından sadece veri kümelerini veya satırları ekleyin. Bu verileri nereden aldığınız tamamen size kalmış. –

+1

Altında standart dosya giriş/çıkışlı bir matris imleci kullanarak sona erdi. Daha sonra ContentResolver.query() öğesini kullanarak bilgileri okuyarak ve bir imleç içinde saklayarak. Yardım için teşekkürler! –

1

SharedPreferences sınıfı kaydetmek ve ilkel veri türleri kalıcı anahtar değer çiftleri geri almasını sağlayan genel bir çerçeve sağlar. Boolean, yüzen , int'leri, uzun ve dizeleri: Herhangi ilkel verileri kaydetmek için SharedPreferences kullanabilirsiniz. Bu veriler

Faydalı linkler (Başvurunuz öldürülse bile) kullanıcı oturumunda devam edecektir:

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

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

İlgili konular