Не получать контактные номера с помощью getContentResolver().query() в Android

Я пытаюсь получить контактные номера, используя метод getContentResolver().query(). но он не получает никаких чисел. вот мой код и файл приложения.

Класс активности

    abc = (Button) findViewById(R.id.button);
    abc.setOnClickListener(new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void onClick(View v) {
            ContentResolver contentResolver = getContentResolver();
            Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
            try {
                if (cursor.getCount() > 0) {
                    while (cursor.moveToNext()) {
                        String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        String contact_Id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                        String Numbers = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Cursor cursor_phone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?" , new String[]{contact_Id}, null);

                        while (cursor_phone.moveToNext()) {
                            String phNumber = cursor_phone.getString(cursor_phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            Numbers = phNumber;
                            int PHONE_TYPE = cursor_phone.getInt(cursor_phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

                            switch (PHONE_TYPE) {
                                case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                                    Numbers += "Home" + phNumber + "\n";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                                    Numbers += "Mobile" + phNumber + "\n";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                                    Numbers += "Work" + phNumber + "\n";
                                    break;
                            }
                        }
                        Toast toast = Toast.makeText(Context, name + Numbers, Toast.LENGTH_SHORT);
                        toast.show();

                    }

                } else {
                    Toast toast = Toast.makeText(a, "Nothing", Toast.LENGTH_SHORT);
                    toast.show();
                }
            }
            catch (Exception Ex)
            {
                Log.d(Ex.toString(),"");
            }

        }

    });

Создать файл Gradle

apply plugin: 'com.android.application'    
android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.metrolixsolutions.contactgetter"
        minSdkVersion 14
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}    

Он не получает никаких номеров для cursor_phone.


person Harshana Narangoda    schedule 12.11.2014    source источник
comment
Проверьте: stackoverflow.com/ вопросы/24244092/   -  person Haresh Chhelana    schedule 12.11.2014
comment
До сих пор такая же проблема...   -  person Harshana Narangoda    schedule 12.11.2014
comment
@harshanaNarangoda смотрите мой ответ здесь: stackoverflow.com/questions/26906756/   -  person Mohammed Ali    schedule 18.11.2014
comment
@MohammedAli Мне нужно также получить название компании с помощью этого запроса, возможно ли это?   -  person Harshana Narangoda    schedule 09.01.2015
comment
Вы можете использовать ContactsContract.CommonDataKinds.Organization.COMPANY см. это: developer.android.com/reference /андроид/провайдер/   -  person Mohammed Ali    schedule 09.01.2015


Ответы (1)


Вам не нужен второй запрос

    abc = (Button) findViewById(R.id.button);
abc.setOnClickListener(new View.OnClickListener() {
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onClick(View v) {
        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        try {
            if (cursor.getCount() > 0) {
                while (cursor.moveToNext()) {
                    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String contact_Id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); // should be ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                    // this is the phone number
                    String Numbers = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    // dont do a toast inside a loop, try Log.d
                    // you will have to import Log 
                    Log.d("XYZ", "contact id " + contact_id + " number " + Numbers);
                    Toast toast = Toast.makeText(Context, name + Numbers, Toast.LENGTH_SHORT);
                    toast.show();

                }

            } else {
                Toast toast = Toast.makeText(a, "Nothing", Toast.LENGTH_SHORT);
                toast.show();
            }
        }
        catch (Exception Ex)
        {
            Log.d(Ex.toString(),"");
        }

    }

});
person Ankur Kumar    schedule 14.11.2014
comment
спасибо за помощь, это работает нормально для меня. Но пришлось внести некоторые изменения. извините за поздний ответ и правильный ответ :) - person Harshana Narangoda; 20.06.2017