Search code examples
javaandroidcontacts

Android: Get contact name using phone number


I am trying to access contact but keeps getting null pointer error.

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

Code

 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;
}

Here is how I use it

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);

}

Is it possible to call BroadcastReceiver in an activity?

Any help will be appreciated. Thanks


Solution

  • You didn't initialize the value context in your activity, and you are calling from activity so you can call like this,

    contactName = getContactName(this, number);
    

    or you can set the context value and call like this,

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