2016-04-23 10 views
0

連絡先の名前(例:「Jose」)&連絡先の電話番号のタイプ値(「自宅」、「仕事」など)特定の電話番号(たとえば、「9600515852」)の電話連絡先からアンドロイドの電話番号から電話番号のラベルを取得する方法

私はこのコードを使用しています。私は連絡先の名前だけを得ることができます。私は電話番号の種類を取得しようとしているときに私はアプリのクラッシュを取得しています。

私を導いてください。

String number = getContactName(this, "9600515852"); 
Toast.makeText(getApplicationContext(),number,Toast.LENGTH_LONG).show(); 

private String getContactName(Context context, String number) { 
String TAG ="" ; 
String name = null, label=null; 
int type=0; 

// define the columns I want the query to return 
String[] projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.PhoneLookup._ID }; 

// encode the phone number and build the filter URI 
    Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 

// query time 
Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); 

     if(cursor != null) { 
      if (cursor.moveToFirst()) { 
       name =  cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 
       // type = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 
      } else { 
       Log.v(TAG, "Contact Not Found @ " + number); 
      } 
      cursor.close(); 
     } 
     return name+" - "+number; 
    } 

答えて

0

これを試してみてください:

type = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.TYPE)); 
0

使用

name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

の代わりに、私の場合は

name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 

は、ボタンクリックで連絡先アプリから連絡先情報を取得することは、このようなものです。そして、それは

を働いていることができます希望

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, 1); 

意向結果をハンドル

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
     case (1): 
      if (resultCode == Activity.RESULT_OK) { 
       Uri contactData = data.getData(); 

       Cursor c = managedQuery(contactData, null, null, null, null); 

       if (c.moveToFirst()) { 
        String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

        String resultedPhoneNum = pop.getContactNumber(id, MainActiv.this); 
        String resultedName=pop.getContactName(name, MainActiv.this); 

        contactName.setText(resultedName); 
       } 
      } 
      break; 
     } 
    } 

を呼べ!

0

正しい方法は、Phone.TYPEをProjectionクエリに含めることです。それにはDISPLAY_NAMEIDしか含まれておらず、クエリに「タイプ」のフィールドが含まれていないため、クラッシュします。

これは間違いなくあなたの問題を解決します。

関連する問題