質問

さまざまなテーブルのさまざまなエントリが、そのテーブルの_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を取得してから、この連絡先内にあるデータを見つけます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top