Попытка получить контактную информацию Недопустимые данные столбца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.