En iyi çoklu tablolar Android içerik sağlayıcılar kullanarak sergilemek için uygulamalar
Olaylar için bir masa ve yerler için bir tablo var sağlayan bir uygulama inşa ediyorum. Diğer uygulamalar bu verilere erişim izni vermek mümkün olmak istiyorum. Bir kaç soru sorun bu tür için en iyi uygulamaları ile ilgili.
Nasıl veritabanı sınıfları yapısı gerekir? Ben şu anda sahip sınıflar için EventsDbAdapter ve VenuesDbAdapter sağlar mantığını sorgulamak her tablo, süre olması ayrı bir DbManager (genişletir SQLiteOpenHelper) yönetmek için veritabanı sürüm oluşturma/yükseltme veritabanları, erişim vermek için veritabanı (getWriteable/ReadeableDatabase). Bu önerilen çözüm, ya da daha iyi ya da bir sınıf (örn. her şeyi konsolide olurum bu DbManager) ya da her ayrılık ve her Bağdaştırıcı izin SQLiteOpenHelper uzanır?
Nasıl birden fazla tablo için içerik sağlayıcılar tasarım gerekir? Bir önceki soruya uzanan, her uygulama için bir İçerik Sağlayıcı kullanmalıyım, ya da Olaylar ve yerler için ayrı sağlayıcıları oluşturmak gerekir?
Bulduğum örneklerin çoğu sadece tek bir tablo uygulamaları ile başa çıkmak, bir püf noktası burada ... çok memnun olurum.
CEVAP
Muhtemelen senin için biraz geç oldu, ama diğerleri bu yararlı olabilir.
İlk birden çok CONTENT_URİs oluşturmanız gerekir
public static final Uri CONTENT_URI1 =
Uri.parse("content://" PROVIDER_NAME "/sampleuri1");
public static final Uri CONTENT_URI2 =
Uri.parse("content://" PROVIDER_NAME "/sampleuri2");
Sonra URİ Eşleştirici genişletin
private static final UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_NAME, "sampleuri1", SAMPLE1);
uriMatcher.addURI(PROVIDER_NAME, "sampleuri1/#", SAMPLE1_ID);
uriMatcher.addURI(PROVIDER_NAME, "sampleuri2", SAMPLE2);
uriMatcher.addURI(PROVIDER_NAME, "sampleuri2/#", SAMPLE2_ID);
}
Sonra tablo oluşturmak
private static final String DATABASE_NAME = "sample.db";
private static final String DATABASE_TABLE1 = "sample1";
private static final String DATABASE_TABLE2 = "sample2";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE1 =
"CREATE TABLE IF NOT EXISTS " DATABASE_TABLE1
" (" _ID1 " INTEGER PRIMARY KEY AUTOINCREMENT,"
"data text, stuff text);";
private static final String DATABASE_CREATE2 =
"CREATE TABLE IF NOT EXISTS " DATABASE_TABLE2
" (" _ID2 " INTEGER PRIMARY KEY AUTOINCREMENT,"
"data text, stuff text);";
onCreate()
7* *ikinci eklemeyi unutmayın
Bir kullanmak için gidiyoruzswitch-caseBlok Masa kullanıldığını belirlemek için. Bu ekleme benim kodudur
@Override
public Uri insert(Uri uri, ContentValues values) {
Uri _uri = null;
switch (uriMatcher.match(uri)){
case SAMPLE1:
long _ID1 = db.insert(DATABASE_TABLE1, "", values);
//---if added successfully---
if (_ID1 > 0) {
_uri = ContentUris.withAppendedId(CONTENT_URI1, _ID1);
getContext().getContentResolver().notifyChange(_uri, null);
}
break;
case SAMPLE2:
long _ID2 = db.insert(DATABASE_TABLE2, "", values);
//---if added successfully---
if (_ID2 > 0) {
_uri = ContentUris.withAppendedId(CONTENT_URI2, _ID2);
getContext().getContentResolver().notifyChange(_uri, null);
}
break;
default: throw new SQLException("Failed to insert row into " uri);
}
return _uri;
}
, *, getType
, *update
10 vb devide gerekir. Sağlayıcınız DATABASE_TABLE veya CONTENT_URİ için çağrıları her yerde bir olgu eklemek ve DATABASE_TABLE1 veya CONTENT_URİ1 var ve istediğiniz kadar için gelecek ve #2.
Nasıl bir Niyet kullanarak bir Android...
Android SQLite için en iyi uygulamalar...
Kullanarak başka bir faaliyet gösterme...
Kullanarak bir android barkod tarama u...
Kullanarak zaman uyumsuz/çoklu görevle...