Android:使用电话号码获取联系人姓名

时间:2017-07-28 07:43:29

标签: java android contact

我正在尝试访问联系人,但一直收到空指针错误。

NullPointerException: Attempt to invoke virtual method ' android.content.ContentResolver android.content.Context.getContentResolver()' on a null object reference

代码

 public static String getContactName(Context context, String phoneNumber) {
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    Cursor cursor = context.getContentResolver().query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
    if (cursor == null) {
        return null;
    }
    String contactName = null;
    String contactNumber = "";
    if(cursor.moveToFirst()) {
        contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
    }

    if(cursor != null && !cursor.isClosed()) {
        cursor.close();
    }

    return contactNumber.equals("") ? phoneNumber : contactName;
}

以下是我如何使用它

public class VideoActivity extends Activity {

String contactName;
String phoneNumber;
Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video);

    //Set caller phone
    String number = getIntent().getStringExtra(
            TelephonyManager.EXTRA_INCOMING_NUMBER);

   contactName = getContactName(context, number);
    TextView text = (TextView) findViewById(R.id.textView2);
    text.setText(contactName);

}

是否可以在活动中调用BroadcastReceiver?

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:1)

您没有在活动中初始化值context,而您正在通过活动进行调用,因此您可以这样调用,

contactName = getContactName(this, number);

或者你可以设置上下文值并像这样调用,

context = this;
contactName = getContactName(context, number);

答案 1 :(得分:0)

private void ContactList(){
        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER;
        Cursor cursor = context.getContentResolver().query(uri, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}, selection, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");


        cursor.moveToFirst();
        while (cursor.isAfterLast() == false) {

            String contactNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

            }
            cursor.moveToNext();
        }
        cursor.close();
        cursor = null;

      }