2011-01-04 3 views
0

나는 안드로이드를 처음 접했다. 그래서 나는 네가 나에게 인내 할 것을 요청한다. 나는 버튼을 누르면 연락처 API가 열리는 응용 프로그램을 작성하려고합니다. 그런 다음 사용자가 연락처를 선택합니다. 그런 다음 "onAcitvityResult (int reqcode, int rescode, Intent data)"에서 선택한 연락처를 가져 오려고합니다. Uri을 가져 오지 않고 전체 데이터베이스를 통해 쿼리하는 방법이 있습니까? android 이메일 주소 가져 오기 및 저장 및 표시

public void onClick(View v) { 
      Log.d(TAG, "contact button clicked"); 
      Toast.makeText(ctx, "Contact button clicked", 
        Toast.LENGTH_SHORT).show(); 
      Intent contacts = new Intent(Intent.ACTION_GET_CONTENT,Contacts.CONTENT_URI); 
      contacts.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); 
      startActivityForResult(contacts,1); 
     } 

는 "Contacts.CONTENT_URI"와 "Intent.ACTION_GET_CONTENT"를 사용하여 내가 해결 오전 : 두 번째 활동이 시작되는 이 내 코드는?

내가 사용하고있는 의도가 맞습니까? 이메일 세부 정보를 여기에 포함해야한다고 생각합니다.

그리고 활동의 결과를 처리하는 곳이다 보호 onActivityResult를 공극 (INT의 requestCode가, INT의 resultCode의 의도 된 데이터) { super.onActivityResult (requestCode가,의 resultCode 데이터); String email = ""; 긴 ID; (requestCode가 == 1) { 는 (의 resultCode == Activity.RESULT_OK) {

  // get the contact ID 
      Uri contacturi= data.getData(); 
      Cursor c= getContentResolver().query(contacturi,null,null,null,null); 
      id = c.getLong(c.getColumnIndex(ContactsContract.Contacts._ID)); 
      c.close(); 

      // get the data package containing the email address for the contact 
      c=getContentResolver().query(ContactsContract.Data.CONTENT_URI, 
        new String[]{Email.DATA1}, 
        ContactsContract.Data.CONTACT_ID + "=? AND " + Email.MIMETYPE + "=?", 
        new String[]{String.valueOf(id), Email.CONTENT_ITEM_TYPE}, null); 
      email=c.getString(c.getColumnIndex(Email.DATA1)); 
      Log.d(TAG, "email is" + email); 
     } 
    } 
    else { 
     Log.d(TAG, "requestCode is not 1"); 
    } 
    EditText ctext= (EditText) findViewById(R.id.contacttxt); 
    ctext.append(email); 
    Log.d(TAG, "onActivityResult() ends"); 
} 

만약 내가 그 "실패 제공하는 결과"라고 런타임 예외를 얻고있다합니다. 일부 setResult() 메서드를 포함해야합니까 ?? 미리 감사드립니다.

+0

코드 예제가 우수합니다. – Brahadeesh

+0

방송 수신기를 사용해야합니까? 어떤 차이가 있니? 모든 통찰력은 인정 될 것이다. – Brahadeesh

+0

디버깅을 시도하고 문제를 찾아 냈습니다. 이 줄에 있습니다 : id = c.getDouble (c.getColumnIndexOrThrow (ContactsContract.Contacts._ID)); – Brahadeesh

답변

0

나는 그것을 가지고있다 :) 당신은 c.moveToFirst()를 추가해야한다; 두 번 초기화 후 두 번 커서를 두 번 반복합니다. 하지만 이유는 모르겠다. 아무도 그것을 설명 할 수 있을까?