2014-12-31 5 views
2

Я пытаюсь получить информацию о выбранном контакте, но, к сожалению, я получаю исключение gettin 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's only one result for the given URI) 
         // CAUTION: The query() method should be called from a separate thread to avoid blocking 
         // your app's 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(); 
+1

Сообщение об исключении кажется вполне понятным. – corsair992

+0

Вы можете сделать свое исключение Google ('IllegalArgumentException: Invalid column data1'), вы получите много сообщений об этом. –

+0

А также публикация полной трассировки стека может помочь найти причину/местоположение исключения. –

ответ

7

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

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

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

+0

Бро, ты спас мой день, это действительно работает !! Спасибо !!! – atzcijhu

0

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

Запустите 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's 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"); 
    } 
} 

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