0

このテーマは何度か扱われていると思うかもしれませんが、これは違います!

私のアプリは、選択した連絡先から連絡先情報 (名前、番号) を取得することになっていますが、名前しか取得できず、番号を取得できません。

@Override
public void onClick(View v) {
   // Opening Contacts Window as a Window
   Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
                                     ContactsContract.Contacts.CONTENT_URI);  
       // calling OnActivityResult with intent And Some contact for Identifie
   startActivityForResult(contactPickerIntent, PICK);  
}

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
  super.onActivityResult(reqCode, resultCode, data);
  switch (reqCode) {
    case (PICK) :
      if (resultCode == Activity.RESULT_OK) {
         Uri contactData = data.getData(); 
         Cursor c =  managedQuery(contactData, null, null, null, null);
         if (c.moveToFirst()) {

            int indexName = c.getColumnIndex(
                        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            int indexNumber = c.getColumnIndex(
                        ContactsContract.CommonDataKinds.Phone.NUMBER);
            nom   = c.getString(indexName);
            numero = c.getString(indexNumber);


           //Visual confirm
           Toast.makeText(this, "Contact " + nom +" enregistré!",
                          Toast.LENGTH_LONG).show();

           //Save in prefs:
           SharedPreferences manager = 
                         PreferenceManager.getDefaultSharedPreferences(this);
           Editor editor = manager.edit();
           editor.putString("num", numero);             
           editor.putString("nom", nom);
           editor.commit();

名前は正しいですが、番号が原因で強制終了されます。

ただし、次のように置き換えると、強制終了はなくなりますが、番号はまだ正しくありません (0 または 1)。

int indexNumber = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)+1;

私は何をすべきか?

4

1 に答える 1

0
private void getDetails(){
        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
        String[] projection    = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                        ContactsContract.CommonDataKinds.Phone.NUMBER };
        Cursor names = getContentResolver().query(uri, projection, null, null, null);

        int indexName = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
        int indexNumber = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
        names.moveToFirst();
        do {

            String name   = names.getString(indexName);
            Log.e("Name new:", name);
            String number = names.getString(indexNumber);
            Log.e("Number new:","::"+number);

        } while (names.moveToNext());
    }

上記は、連絡先データベースからすべての名前と番号を再実行します。

メールIDが必要な場合は、次の行も追加します:::

while (cur.moveToNext()) {
            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
            Cursor email = cr.query( 
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                            new String[]{id}, null); 
            while (email.moveToNext()) { 
                //to get the contact names
                // if the email addresses were stored in an array
                String emailid = email.getString(email.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                Log.e("Email id ::", emailid);
                String emailType = email.getString(email.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
                Log.e("Email Type ::", emailType);

            } 
            email.close();
        }
于 2012-04-24T03:14:16.457 に答える