2014-12-21 2 views
0

안녕하세요. 휴대 전화 번호를 받고 edittext 입력란에 설정하고 싶습니다.연락처 목록에서 휴대폰 번호를 얻으려면 어떻게해야하나요?

Button onclick() :

btnContacts.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
       startActivityForResult(intent, PICK_CONTACT); 
      } 
     }); 

onActivityResult() 코드 :

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     Cursor cursor = null; 
     // mName.setText(context.getString(R.string.not_available)); 
     // mNumber.setText(context.getString(R.string.not_available)); 

     if(requestCode == PICK_CONTACT && resultCode == RESULT_OK && data != null){ 
      // Log.d(TAG, "requestCode, resultCode, data ok"); 
      Uri uri = data.getData(); 
      try{ 
       String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER}; 
//    cursor = getContentResolver().query(uri, projection, null, null, null); 
       cursor = getContentResolver().query(uri, null, null, null, null); 
       cursor.moveToFirst(); 
       // Log.d(TAG, "Trying to retrieve the name and the number"); 
       String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
       String hasNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER)); 

       //Log.d(TAG, "hasNumber "+hasNumber); 
       //mName.setText(name); 


       // Log.d(TAG, "contact has telephone number"); 
        //set name and number 
        String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        // mNumber.setText(phoneNumber); 
        Toast toast = Toast.makeText(getApplicationContext(),phoneNumber, Toast.LENGTH_SHORT); 
        toast.show(); 


      }catch(Exception ex){ 
       Toast toast = Toast.makeText(getApplicationContext(),"fail", Toast.LENGTH_SHORT); 
       toast.show(); 
      } 
      if(cursor!= null && !cursor.isClosed()){ 
       cursor.close(); 
      } 
     }else{ 

      Toast toast = Toast.makeText(getApplicationContext(),"failed", Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    } 

내가 접촉 책이 열리는 button 클릭하고 난 연락처를 선택하면 일부 오류가 발생합니다

로그 :

Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 36 columns. 

어디에서 잘못 했습니까?

+0

잘못된 열을 사용하는 경우 DatabaseUtils.dumpCursor를 사용하여 모든 열을 확인하십시오 – pskink

답변

0

ContactsContract에는 많은 열이 있습니다. ContactsContract.CommonDataKinds.Phone.NUMBER 열에는 아마도 휴대 전화 번호가 포함되어 있지 않습니다. 그것은 당신이 모든 전화 번호를 스크롤 할 필요가

는 다음과 같이 입력 ... 아무것도 포함하지 않을 수 있습니다

How to get contacts' phone number in Android

당신은 유형 MOBILE 만 열을 얻으려고하는 코드를 수정할 수 있습니다 - 그러나 사용자는 게으르며 전화 번호를 올바르게 레이블링하지 않을 수 있음을 기억하십시오. 둘 이상의 번호가있는 경우 사용자에게 휴대 전화 번호를 선택하라는 메시지를 표시해야합니다.

+0

고맙습니다 ... 그게 .. – diwa

+0

이것은 단지 제안 일 뿐이며 일반적으로있을 때 호출되는 번호를 선택하는 옵션이 있습니다 두 개 이상의 숫자가 저장되었습니다. 해당 정보를 사용할 수 있으며, 설정하지 않은 경우 사용자에게 수행 할 작업을 요청하십시오. – blueBurningCoder

관련 문제