2016-06-25 4 views
0

以下のコードを使用して連絡先の名前とIDを取得していますが、電話番号を取得していません。下のコードから電話番号を取得するにはどうすればよいですか?ContentResolverから単一のクエリで電話番号を取得するにはどうすればよいですか?

ContentResolver contentResolver = getBaseContext().getContentResolver(); 

Uri uri = ContactsContract.Contacts.CONTENT_URI; 
String[] projection = { 
     ContactsContract.Contacts._ID, 
     ContactsContract.Contacts.DISPLAY_NAME, 
     ContactsContract.Contacts.HAS_PHONE_NUMBER, 
     ContactsContract.Contacts.STARRED, 
     ContactsContract.Contacts.TIMES_CONTACTED, 
     ContactsContract.Contacts.LAST_TIME_CONTACTED 
}; 
String selection = String.format("%s > 0", ContactsContract.Contacts.HAS_PHONE_NUMBER); 
String[] selectionArgs = null; 
String sortOrder = String.format(
     "%s DESC, %s DESC, %S DESC, UPPER(%s) ASC", 
     ContactsContract.Contacts.STARRED, 
     ContactsContract.Contacts.TIMES_CONTACTED, 
     ContactsContract.Contacts.LAST_TIME_CONTACTED, 
     ContactsContract.Contacts.DISPLAY_NAME 
); 
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArgs, sortOrder); 

if (cursor.getCount() > 0) { 
    while (cursor.moveToNext()) { 
     String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 


     if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 

      System.out.println("name : " + name + ", ID : "); 

     } 

     } 
    } 
    cursor.close(); 
} 
+0

これについて進捗状況を確認できましたか? – gabe3vino

答えて

1

CModel.java

public class CModel { 
String firstname; 
String lastname; 
String contactno; 
String Imagepath; 
int ID; 
String contactid; 

public String getCheck() { 
    return Check; 
} 

String Check; 

public String getContactid() { 
    return contactid; 
} 

public CModel(String fnm, String lastname, String userprofile, int ID, String contactno, String Check) { 
    this.firstname = fnm; 
    this.lastname = lastname; 
    this.Imagepath = userprofile; 
    this.ID = ID; 
    this.contactno = contactno; 
    this.Check = Check; 
} 


public String getFirstname() { 
    return firstname; 
} 

public String getLastname() { 
    return lastname; 
} 

public String getContactno() { 
    return contactno; 
} 

public String getImagepath() { 
    return Imagepath; 
} 

public int getID() { 
    return ID; 
} 
あなたの活動ファイルの呼び出しで

この方法

private ArrayList<CModel> getcontact() { 
ArrayList<CModel> contactlist = new ArrayList<CModel>; 
try { 
    Bitmap my_btmp = null; 
    String profilepic; 
    String phone = null; 
    contactlist = new ArrayList<CModel>(); 
    ContentResolver cr = getContentResolver(); 
    String[] projection = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME}; 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, 
      ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 
    while (cur.moveToNext()) { 
     String contactId = cur.getString(cur.getColumnIndex(ContactsContract.Data._ID)); 
     String displayName = cur.getString(cur.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
     Uri my_contact_Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactId)); 
     InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), my_contact_Uri); 
     Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
       new String[]{contactId}, null); 
     while (pCur.moveToNext()) { 
      phone = pCur.getString(
        pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     } 
     pCur.close(); 
     if (photo_stream != null) { 
      BufferedInputStream buf = new BufferedInputStream(photo_stream); 
      my_btmp = BitmapFactory.decodeStream(buf); 
      profilepic = BitMapToString(my_btmp); 
     } else { 
      Bitmap bitmap = BitmapFactory.decodeResource(HomePage.this.getResources(), R.drawable.profilepic); 
      my_btmp = bitmap; 
      profilepic = BitMapToString(my_btmp); 

     } 
     String columns[] = { 
       ContactsContract.CommonDataKinds.Event.START_DATE, 
       ContactsContract.CommonDataKinds.Event.TYPE, 
       ContactsContract.CommonDataKinds.Event.MIMETYPE, 
     }; 
     String where =ContactsContract.CommonDataKinds.Event.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE + "' and " + ContactsContract.Data.CONTACT_ID + " = " + contactId; 
     String[] selectionArgs = null; 
     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME; 
     Cursor birthdayCur = cr.query(ContactsContract.Data.CONTENT_URI, columns, where, selectionArgs, sortOrder); 
     if (birthdayCur.getCount() > 0) { 
      if (birthdayCur.moveToFirst()) { 
       do { 

        contactlist.add(new CModel(displayName, "", profilepic, 0, phone,"phone")); 
        boolean flag = con.comparedata(phone); 

       } while (birthdayCur.moveToNext()); 

      } 

     } 
     birthdayCur.close(); 
    } 
    cur.close(); 
} catch (Exception e) { 
} 
return contactlist; 

}

+0

拳のCModel.javaファイルを作成し、そのあとにあなたのアクティビティファイルの後に、getcontact()メソッドとctrl + spaceが必要なすべてのパッケージをインポートした後にエラーが発生した場合は、 – Chetna

+0

そしてjstはgetcontact()を呼び出して電話機の連絡先リストを返します。また、連絡先のアクセス許可を与えます – Chetna

+0

Chetna

0

EDIT:これは1つのクエリですべての電話番号の検索で私の試みです電話番号のない連絡先が存在する場合、私はその動作が不明です。一般的には、常に電話番号を持つ連絡先の一覧を照会し、その連絡先番号のみを照会することをお勧めします。参考のため

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
while (phones.moveToNext()) 
{ 
    String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
    String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

    //Do something with each name and phone somewhere each time you loop through; in your provided code you seemed to be printing them out 

} 
phones.close(); 

:一般的にHow to get contacts' phone number in Android

、:Read all contact's phone numbers in android



この古いポストは私が連絡先に書き込みを行ってきたいくつかの以前の研究に基づいて、役に立つように見えました電話番号は次のように格納されます:

ContactsContract.CommonDataKinds.Phone.NUMBER 

だから、あなたが提供されているコードのスニペットを取って、私はおよそように編集します:あなたがからのデータの右のセグメントをつかんだというクエリで確認する必要があります。もちろん、

if (cursor.getCount() > 0) { 
     while (cursor.moveToNext()) { 
      String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 


      ... 
      ... 

     cursor.close(); 
    } 

コンタクト(すなわちあなたの投影を更新する)、それはうまくいけば正しい方向にあなたを指し示すはずです!

+0

この列が存在しないため、エラーが表示されます..全体のクエリを書き留めてください..このクエリは常にシステム上でクラッシュします。約100回....電話番号で質問全体を書き直せますかありがとう..本当に感謝しています。 – jason

+0

ContactsContractデータベースには、さまざまな拡張可能なテーブルがあり、クエリで定義したURI経由でアクセスします。これらのさまざまな表は、https://developer.android.com/reference/android/provider/ContactsContractで定義されています。HTML だから、あなたが提供したコードでは、URIはContactsContract.Contacts.CONTENT_URIです。ただし、このURIはContactsテーブルを指しているため、ContactsContract db内の他のテーブルにアクセスすることはできません。 だから、別のテーブルに1.multipleクエリを実行する必要があり(間違った音)や、あなたが必要とするすべてのデータへのアクセス権を持っているContactsContract内のテーブルを2.find。 – gabe3vino

+0

^あなたのURI(および投影/選択)を変更して適切なテーブルにアクセスし、必要な値(番号、名前、およびID)を取得します。また、_idは一般的にテーブル/連絡先db内の連絡先のIDであることに注意してください。これは行番号に関係していると考えられますので、有用な情報ではない可能性があります。 – gabe3vino

1

'ContactsContract.Contacts'に電話番号はありませんが、 'ContactsContract.Contacts._ID'と 'ContactsContract.CommonDataKinds.Phone.CONTACT_ID'は連絡先ごとに同じです。したがって、あなたは 'ContactsContract.CommonDataKinds.Phone.CONTENT_URI'から電話番号を得ることができます。このコードをカーソルのループの内側に配置します。全体的にこれらは2つのクエリですが、少なくともあなたはどこを検索するかを知っています。これは実行に時間がかかりません。

Cursor phoneCursor = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId , null, null); 

     while (phoneCursor.moveToNext()) { 
      String phone = phoneCursor.getString(phoneCursor 
        .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

     } 
関連する問題