1

私の質問はばかげているようですが、以下のコードで頭が痛くなります。以下のコードを印刷contactIdtelephone numberて画面に表示します。

それはうまく機能しますが、もっと明確に知る必要があること:

 ContentResolver solver = getContentResolver();
            String mess="";

            Cursor cursor = solver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
            while (cursor.moveToNext()){
                String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                mess = mess + "ID: "+contactId+"\n";

                Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);
                while (phones.moveToNext()) { 
                     String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));    
                     mess = mess + phoneNumber + "\n";
                  } 
            }

私が知らないのは、上記のコードの次の行です。

Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);

Android Development3番目のパラメーターについてのように:

selection : SQL WHERE 句としてフォーマットされた、返される行を宣言するフィルター (WHERE 自体を除く)。null を渡すと、指定された URI のすべての行が返されます。

したがって、この定義としてCONTACT_IDは、「A ROW」として機能します。(だからfilter which row to return)、

ただし、この行CONTACT_IDとして、「A COLUMN」として機能します。

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

この点について説明してください。

ありがとう :)

4

3 に答える 3

1

それは列です(このように宣言されていますINTEGER PRIMARY KEY AUTOINCREMENT)。の:

Cursor phones = getContentResolver().query( 
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                    null, 
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, 
                    null, null);

をクエリしますContentProviderが、_ID列を使用して結果をフィルタリングします。あなたは言っています:「列のContentProviderどこから行が欲しいのですか?_ID私は値contactIdだけを見つけます」。の:

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

_ID列インデックス整数を取得するために使用されるため(その列から値を取得するため)、0、1、2 などの単純な数値を使用する必要がなく、間違いを回避できます。

編集: 2 番目のパラメーター (プロジェクションとも呼ばれます) は、プロバイダーから取得するデータの列を表します ( null= すべての列を取得します)。2 番目のパラメーターをフィルターとして見ることができます。配列で指定した列のみを取得します (たとえば、複数の列を使用しないため不要な場合があるため、2 番目のパラメーターには文字列配列を設定します)。必要な列を省略し、必要のない列は省略します)。3 番目のパラメーターは行をフィルター処理し、2 番目のパラメーターは取得した列をフィルター処理します()

于 2012-03-10T16:51:08.720 に答える
1

テーブル A から列 column1 を選択し、その値が 5 の場合にフィルタリングを使用する場合は、SQL クエリを確認する必要があります。このクエリは次のように記述します。

SELECT column1 から A WHERE column1=5

これは、column1 の値が 5 に等しいテーブルから値を選択することを意味します。したがって、ここで異常なことは何もありません。

于 2012-03-10T16:59:08.863 に答える
0

CONTACT_ID は列です。たとえば、「CONTACT_ID = 10」フィルター式を使用すると、CONTACT_ID セルに値 10 を持つすべての行が取得されます。SQL の where 句に関する次のリンクを参照してください: http://www.w3schools.com/sql/sql_where.asp

于 2012-03-10T16:45:51.610 に答える