Попытка получить контактную информацию Недопустимые данные столбца1

Я пытаюсь получить информацию о выбранном контакте, но, к сожалению, я получаю исключение. Caused by: java.lang.IllegalArgumentException: Invalid column data1 Я скопировал код из руководства Android. Вот мой код. Я делаю это из фрагмента в активности по методу результата. Данные не являются нулевыми, они вызывают исключение в методе запроса.

case REQUEST_CODE_CONTACT:
 // Get the URI that points to the selected contact
 Uri contactUri = data.getData();
 // We only need the NUMBER column, because there will be only one row in the result
 String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};

 // Perform the query on the contact to get the NUMBER column
 // We don't need a selection or sort order (there only one result for the given URI)
 // CAUTION: The query() method should be called from a separate thread to avoid blocking
 // your app UI thread. (For simplicity of the sample, this code doesn't do that.)
 // Consider using CursorLoader to perform the query.
 Cursor cursor = getActivity().getApplicationContext().getContentResolver().query(contactUri, projection, null, null, null);
 cursor.moveToFirst();

 // Retrieve the phone number from the NUMBER column
 int columnNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
 int columnName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
 String number = cursor.getString(columnNumber);
 String name = cursor.getString(columnName);

 Toast.makeText(getActivity().getApplicationContext(),"You have selected "+name + " " + number,Toast.LENGTH_LONG).show();
2 ответа

Как вы начинаете собирать контактную деятельность? Попробуй это. Потому что у меня была аналогичная проблема, вызванная не установкой типа намерения.

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

Я надеюсь, что это поможет вам.


Попробуйте этот код:

Запустите contactPickerIntent при нажатии кнопки:

tvaddressbook.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
 startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);

 }
 });

Затем OnActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
 if (resultCode == RESULT_OK) {
 switch (requestCode) 
 {
 case CONTACT_PICKER_RESULT:
 Cursor cursor = null;
 String email = "", name = "";
 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 everything email
 cursor = getContentResolver().query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[] { id }, null);

 int nameId = cursor.getColumnIndex(Contacts.DISPLAY_NAME);

 int emailIdx = cursor.getColumnIndex(Email.DATA);

 // let just get the first email
 if (cursor.moveToFirst()) {
 email = cursor.getString(emailIdx);
 name = cursor.getString(nameId);
 Log.v(DEBUG_TAG, "Got email: " + email);
 } else {
 Log.w(DEBUG_TAG, "No results");
 }
 } catch (Exception e) {
 Log.e(DEBUG_TAG, "Failed to get email data", e);
 } finally {
 if (cursor != null) {
 cursor.close();
 }

 edsharewith.setText(email);

 if (email.length() == 0 && name.length() == 0) 
 {
 Toast.makeText(this, "No Email for Selected Contact",Toast.LENGTH_LONG).show();
 }
 }
 break;
 }

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

Имя и адрес строки будут содержать имя и адрес электронной почты определенного контакта.

licensed under cc by-sa 3.0 with attribution.