Заполнение номера контакта из адресной книги работает, когда контакт выбран из списка, но не удается при выборе из результата поиска

1

Я использую следующий код для отображения списка контактов, а затем извлекаю контактный номер, выбирая контакт. Тем не менее, ни один номер не извлекается, когда список ищет контакт, а затем выбирается из результатов поиска. Есть ли у вас какие-либо идеи о том, что мне не хватает? Любая помощь приветствуется. Спасибо за чтение.

 private void registerLongClick() {
        TextView vonage_number = (TextView) findViewById(R.id.vonage_number);
        vonage_number.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                // Perform action on click
                    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,Phone.CONTENT_URI);  
                startActivityForResult(contactPickerIntent, 1001);
                            return true;
            }
        });
    }    

    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        String DEBUG_TAG = Constants.CALL_LOG_TAG_NAME;
            if (resultCode == RESULT_OK) {  
            switch (requestCode) {  
            case 1001:  
                Cursor cursor = null;  
                String phone = "";  
                try {  
                    Uri result = data.getData();  
                    Log.v(DEBUG_TAG, "Got a contact result: "  
                            + result.toString());  

                    // get the contact id from the Uri  
                    String id = result.getLastPathSegment();  

                    //query for phone number
                    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,ContactsContract.CommonDataKinds.Phone._ID + " = " + id, null,
                            null);  

                    int phoneIdx = cursor.getColumnIndex(Phone.DATA);  

                    if (cursor.moveToFirst()) { 
                            phone = cursor.getString(phoneIdx);  
                        Log.v(DEBUG_TAG, "Got phone: " + phone);  
                    } else {  
                        Log.w(DEBUG_TAG, "No results");  
                    }  
                } catch (Exception e) {  
                    Log.e(DEBUG_TAG, "Failed to get phone data", e);  
                } finally {  
                    if (cursor != null) {  
                        cursor.close();  
                    }  
                    EditText phoneEntry = (EditText) findViewById(R.id.vonage_number);  
                    phoneEntry.setText(phoneEntry.getText().toString().trim()+phone);  
                    if (phone.length() == 0) {  
                        Toast.makeText(this, "No phone found for contact.",  
                                Toast.LENGTH_LONG).show();  
                    }  

                }  

                break;  
            }  

        } else {  
            Log.w(DEBUG_TAG, "Warning: activity result not ok");  
        }  
    }
Теги:

1 ответ

3
Лучший ответ

Попробуйте следующее для try {} catch {}.

try {
Uri contactData = data.getData();  
Log.debug("Got a contact result: " + contactData.toString());  
Cursor lookupCursor =  managedQuery(contactData, null, null, null, null);
if (lookupCursor.moveToFirst()) {                                       
        String lookupKey = lookupCursor.getString(lookupCursor.getColumnIndexOrThrow(android.provider.ContactsContract.PhoneLookup.LOOKUP_KEY));
        Log.debug("Lookup key: " + lookupKey);

        cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY + " LIKE '" + lookupKey + "'", null, null);  
        startManagingCursor(cursor);

        if (cursor.moveToFirst()) {
                int phoneIdx = cursor.getColumnIndex(Phone.DATA);
                phone = cursor.getString(phoneIdx);  
                Log.debug("Got phone: " + phone); 
                cardNumber.setText(cardNumber.getText().toString().trim()+phone);  
                if (phone.length() == 0) {  
                    Toast.makeText(this, "No phone found for contact.", Toast.LENGTH_LONG).show();  
                }
        } 
        else {  
                Log.debug("No results");  
        } 
}  } catch (Exception e) {  
Log.error("Failed to get phone data:" + e.getMessage());  } 
  • 0
    Спасибо @Mano Это сработало как раз.
  • 0
    Этот фрагмент кода отображает список адресов со строкой для каждого номера контакта, когда я долго нажимаю текстовое поле. Однако я только что понял, что когда я ищу контакт в этом списке, результаты поиска не отображают все числа, которые есть у искомого контакта. Вместо этого он отображает только имя контакта. У вас есть идеи, как это исправить?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню