2016-12-01 8 views
0

私は主題について多くの読書をしましたが、これらの記号*, #が/であることを意味するものは何も見つかりません。問題を理解するUriMatcher構文

SqLiteの?のような何かのプレースホルダとして使用されている場合、それらは何に置き換えられますか?また、あなたがしているのはUriのものと一致しているなら、この暗示的な表記をする目的は何ですか?

リストやオブジェクトなどを返す場合は、定数に名前を付けて名前を付けて、それに任意の値を付けてそこから移動するのはなぜですか?

など。

私は特定のIDを持つ私のデータベースのエントリを削除するには、例えばこれを使用
sURIMatcher.addURI("contacts", "people", PEOPLE); 
sURIMatcher.addURI("contacts", "people_id", PEOPLE_ID); 
sURIMatcher.addURI("contacts", "people_phones", PEOPLE_PHONES); 

答えて

1

sURIMatcher.addURI("contacts", "people", PEOPLE); 
sURIMatcher.addURI("contacts", "people/#", PEOPLE_ID); 
sURIMatcher.addURI("contacts", "people/#/phones", PEOPLE_PHONES); 

Uri deleteUri = Uri.parse(NoteProvider.CONTENT_URI + "/" + id); 
context.getContentResolver().delete(deleteUri, null, null); 

// URI Matcher 
sURIMatcher.addURI(AUTHORITY, NOTE_BASE_PATH + "/#", NOTE_WITH_ID); 

// delete 
String id = uri.getLastPathSegment(); 
rowsDeleted = db.delete(NoteEntry.TABLE_NAME, NoteEntry._ID + "=" + id, null); 
  • *は:任意の長さの任意の有効な文字の文字列にマッチします。
  • #:任意の長さの数字の文字列に一致します。

URIは、リソースへのパスを表し、ContentProviderでアクセスします。だから私はURIがこの場合に最も適していると思います。

コンテンツURIは、プロバイダー内のデータを識別するURIです。内容 URIには、プロバイダ全体(その権限)の記号名 と、テーブルまたはファイル(パス)を指す名前が含まれます。オプションのID は、テーブル内の個々の行を指します。