私は別のテーブルを照会したい場合、nodo言うことができますありがとうございましたか!新しいテーブルを照会
あなたはUri
は、別のテーブルを使用するのと同様のデータソースを選択するので、新しいUri
を追加する必要があることを意味します。
あなたは他のテーブルのtodosに既に存在するハードコードされた値を基本的にすべて追加します。たとえば:
// ------- usually the same for all
private static final String AUTHORITY = "de.vogella.android.todos.contentprovider";
// ------- define some Uris
private static final String PATH_TODOS = "todos";
private static final String PATH_REMINDERS = "reminders";
public static final Uri CONTENT_URI_TODOS = Uri.parse("content://" + AUTHORITY
+ "/" + PATH_TODOS);
public static final Uri CONTENT_URI_REMINDERS = Uri.parse("content://" + AUTHORITY
+ "/" + PATH_REMINDERS);
// ------- maybe also define CONTENT_TYPE for each
// ------- setup UriMatcher
private static final int TODOS = 10;
private static final int TODO_ID = 20;
private static final int REMINDERS = 30;
private static final int REMINDERS_ID = 40;
private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
sURIMatcher.addURI(AUTHORITY, PATH_TODOS, TODOS);
sURIMatcher.addURI(AUTHORITY, PATH_TODOS + "/#", TODO_ID);
sURIMatcher.addURI(AUTHORITY, PATH_REMINDERS, REMINDERS);
sURIMatcher.addURI(AUTHORITY, PATH_REMINDERS + "/#", REMINDERS_ID);
}
//@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// Using SQLiteQueryBuilder instead of query() method
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
int uriType = sURIMatcher.match(uri);
switch (uriType) {
case TODO_ID:
// Adding the ID to the original query
queryBuilder.appendWhere(TodoTable.COLUMN_ID + "="
+ uri.getLastPathSegment());
//$FALL-THROUGH$
case TODOS:
queryBuilder.setTables(TodoTable.TABLE_TODO);
break;
case REMINDERS_ID:
// Adding the ID to the original query
queryBuilder.appendWhere(ReminderTable.COLUMN_ID + "="
+ uri.getLastPathSegment());
//$FALL-THROUGH$
case REMINDERS:
queryBuilder.setTables(ReminderTable.TABLE_REMINDER);
break;
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}
は私がqueryBuilder.setTables(文字列inTables)に何らかの形でテーブル名を追加する必要がありますか?
異なる場合はUri
異なるテーブルから読み込み、Uriマッチに基づいてテーブルを設定します。
各テーブルに1つのCONTENT_TYPEとCONTENT_ITEM_TYPEはありますか?
実際のコンテンツタイプによって異なります。それらが異なっていて、タイプがyesである必要がある場合。しかし、あなたはそれらをまったく持っている必要はありません。その例はそれらを定義しますが、それらを使用しません。タイプをgetType
に戻す必要があります。documentationを参照してください。
クエリメソッドのTODOおよびTODO_ID変数とスイッチについては?
ものがうまくhere説明するUriMatcher
に対して定義された定数です。基本的には、文字列のマッチングのための単純化です。大きなContentProvider
は100種類の異なるUrisを持つことができ、if (uri.getPath().equals("todos") { /* code */ } else if (uri..
を書かなければならない場合は、query
で正しいテーブルを選択することは苦しいでしょう。
1. setTablesをマッピングするためにUriMatcherの同じインスタンスをusetのContentProvider拡張するクラスのようでなければなりません2 ... 2. Content mime ... Yes 3.再びすべてのテーブルに対して。 4.間違ったパス...いいえ、私は良い道だと思う...あなたは何かの種類のジェネレータfxを検索/書き込もうとすることができますhttp://selvin.pl/autocontent.zip <=その鉱山ですが、まだサポートされていないビューですテーブル – Selvin