0

電話から連絡先を読み込むのに役立つ利用可能な例をいくつか試しました。エミュレーターでは問題なく動作しますが、リアルタイム モバイルで試すとクラッシュします。誰でも問題なく動作するテスト済みのコードを送ってもらえますか。次に、自分のコードと比較できます。

1 つの失敗したコード例。

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

    }
phones.close();

親切に助けてください。

4

2 に答える 2

0

まず、これをマニフェスト ファイルに追加します。

  <uses-permission android:name="android.permission.READ_CONTACTS"/>

AndroidManifest.xml ファイルに追加すると、電話の連絡先を次のようにループできます。

     Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
      while (cursor.moveToNext()) { 
      String contactId = cursor.getString(cursor.getColumnIndex( 
       ContactsContract.Contacts._ID)); 
       String hasPhone =  cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
       if (Boolean.parseBoolean(hasPhone)) { 
     // You know it has a number so now query it like this
       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));                 
         } 
      phones.close(); 
         }

        Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,  ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 
         while (emails.moveToNext()) { 
      // This would allow you get several email addresses 
       String emailAddress = emails.getString( 
        emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
        } 
        emails.close();
          }
       cursor.close(); 
于 2012-11-04T11:47:38.783 に答える
0

phonesではないことを確認してくださいnullnullこの行を追加してポインタを最初の電話に移動しない場合:

cursor.moveToFirst();

これがどのように機能するかの例として、コードのスニペットを次に示します。

Uri contactData = data.getData();
    //Cursor cursor =  managedQuery(contactData, null, null, null, null);
    Cursor cursor =  cr.query(contactData, null, null, null, null);
    cursor.moveToFirst();
    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
    String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));



    if (Integer.parseInt(cursor.getString(
            cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
        Cursor pCur = cr.query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                null, 
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                new String[]{id},
                                null);

        while (pCur.moveToNext()) {
            String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

            break; // ? we want only 1 value
        } 
        pCur.close();
    }

    cursor.close();

それがあなたを助けるとしましょう

于 2012-11-04T11:48:27.243 に答える