質問
さまざまなテーブルのさまざまなエントリが、そのテーブルの_ID列を介してリンクされていることを読みました。たとえば、連絡先には_id = 1がある場合があります。
ContactsContract.Contacts._ID
そして今、私はその連絡先の電話番号を読みたいです
Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId , null, null);
//...
String number = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
String id = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone._ID));
これは正常に動作しますが、私が期待するのは、_ IDが1の場合、電話番号の_ IDが一緒に属しているので1つでもあるが、それらは等しくないということです。問題は、Androidがこれらのエントリとどのように一致するのかということです。
ありがとう、A。
解決
データベーステーブルが表示されたときに詳細を取得できます
私の理解に関する限り、これはSQLite3 DBブラウザを使用してAndroid Contacts2.DBファイルを表示して得た情報です
Androidの連絡先をテストするために6つの連絡先を作成しました
連絡先テーブルでは、_idとraw_contact_idは実際に同じです(contactscontract.contactsプロバイダーを意味します)
データテーブルでは、Mimetype IDをWHERE条件として使用して、電話番号や電子メール、姓と姓のような人の実際の詳細を取得します
データテーブルを検討するときは、raw_contact_idをここで条件として使用して、連絡先の特定のレコードを取得します
ex my raw_contact_idは1です
Data1列の電子メール、電話、表示名で構成される3行がありました
電話、電子メール、または表示名のみが必要な場合はどうなるかを尋ねることができます。
PhoneNumberMimetype_idが5 is 5を取得するには、display_name mimetype_idが6 is 6を取得するにはmimetype_idが1です1は1です
あなたが初心者である場合、あなたはこれらすべてを理解していないかもしれません...しかし、あなたが内部テーブルを見るならば、あなたは私があなたに言ったすべてのことを手に入れます
アクセス連絡先の詳細は、contact_idまたはraw_contact_idのみでのみ、すべてのテーブルにある_idではありません。列は異なる目的のためです。
あなたはこのイメージで私が言っていることを見ることができますhttp://img94.imageshack.us/i/tablesxa.jpg
他のヒント
連絡先は、1つ以上の生の連絡先に対応します。連絡先の実際のデータはとして保存されます
ContactsContract.Contacts.Data
各データ項目には、属する生の連絡先のIDが含まれています。各生の連絡先には、属する連絡先のIDが含まれています。
したがって、連絡先IDを考えると、それが表すRAW連絡先を見つけることができます。生の連絡先IDを取得してから、この連絡先内にあるデータを見つけます。