2012-10-09 2 views
0
public class ImportContactsActivity extends Activity { 
/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contact); 
     TextView txt = (TextView)findViewById(R.id.con); 
     String msg = ""; 

     ContentResolver cr = getContentResolver(); 
     Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
     while (cursor.moveToNext()) { 
       String name = cursor.getString(cursor.getColumnIndexOrThrow(People.NAME)); 
       String number = cursor.getString(cursor.getColumnIndexOrThrow(People.NUMBER)); 
       String email = cursor.getString(cursor.getColumnIndexOrThrow(People.PRIMARY_EMAIL_ID)); 

       msg += name + " " + number + " " + email + "\n"; 
     } 
     txt.setText(msg.toString()); 
    } 
} 

응용 프로그램이 모든 현재 전화 연락처 (이름 + 전화 번호)를 포함하는 전자 메일을 백업 대안으로 보낼 수있는 응용 프로그램을 개발 중입니다. 나는 모든 전화 연락처 정보를 추출하여 TextView에 표시하는 방법을 시도하고 있습니다 ... 그러나 나는 그것을 할 수 없습니다, 누군가 저에게 상담하십시오. 감사합니다 ...모든 전화 연락처 (이름, 전화 번호)를 텍스트보기 또는 문자열로 표시하는 방법은 무엇입니까?

LogCat 
10-09 15:22:48.634: E/AndroidRuntime(680): FATAL EXCEPTION: main 
10-09 15:22:48.634: E/AndroidRuntime(680): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.importcontacts/com.example.importcontacts.ImportContactsActivity} : java.lang.IllegalArgumentException: column 'name' does not exist 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.os.Looper.loop(Looper.java:137) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.ActivityThread.main(ActivityThread.java:4424) 
10-09 15:22:48.634: E/AndroidRuntime(680): at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 15:22:48.634: E/AndroidRuntime(680): at java.lang.reflect.Method.invoke(Method.java:511) 
10-09 15:22:48.634: E/AndroidRuntime(680): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
10-09 15:22:48.634: E/AndroidRuntime(680): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
10-09 15:22:48.634: E/AndroidRuntime(680): at dalvik.system.NativeStart.main(Native Method) 
10-09 15:22:48.634: E/AndroidRuntime(680): Caused by: java.lang.IllegalArgumentException: column 'name' does not exist 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:267) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78) 
10-09 15:22:48.634: E/AndroidRuntime(680): at com.example.importcontacts.ImportContactsActivity.onCreate(ImportContactsActivity.java:46) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.Activity.performCreate(Activity.java:4465) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
10-09 15:22:48.634: E/AndroidRuntime(680): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
10-09 15:22:48.634: E/AndroidRuntime(680): ... 11 more 
+0

? 당신이 오류를 받고있는 contactId를 사용하여 이메일 URI를 쿼리 그래서

long contactId = cursor.getLong(cursor.getColumnIndexOrThrow(Phone.CONTACT_ID)); 

같은 접촉 ID를 얻을 수 있나요? 그래서 게시하는 경우 logcat 로그가 유용 할 것입니다, 당신의 문제가 무엇인지 자세히 설명해 주시겠습니까? 감사합니다. – sokie

답변

2

사용 ContactsContract.CommonDataKinds.Phone.CONTENT_URI 대신 ContactsContract.Contacts.CONTENT_URI 당신은 당신은 또 다른 쿼리가 필요합니다 이러한 라인

String name = cursor.getString(cursor.getColumnIndexOrThrow(People.NAME)); 
String number = cursor.getString(cursor.getColumnIndexOrThrow(People.NUMBER)); 
String email = cursor.getString(cursor.getColumnIndexOrThrow(People.PRIMARY_EMAIL_ID)); 

String name = cursor.getString(cursor.getColumnIndexOrThrow(Phone.DISPLAY_NAME)); 
String number = cursor.getString(cursor.getColumnIndexOrThrow(Phone.NUMBER)); 

에 전화 번호를 얻고, 변경할 수 있도록 email_id를 받으십시오. 첫 번째 커서에서 당신은 이제 필터 문제가 무엇인지

long emailId; 
Cursor cur = getContentResolver() 
        .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
        new String[]{"_id"}, 
        "contact_id = " + contactId, 
        null,null); 
if(cur != null && cur.moveToFirst()){ 
    emailId = cur.getLong(0); 
} 
+0

안녕하세요, 답변 해 주셔서 감사합니다. 그러나 특정 연락처에 둘 이상의 전화 번호가 포함되어있는 경우 전화 번호를 추출하려면 어떻게해야합니까? –

+0

'Phone.CONTENT_URI'는 저장된 모든 전화 번호 목록을 제공합니다. 즉, 모든 행은 연락처가 아닌 전화 번호입니다. 전화 번호가 속한 연락처를 찾으려면 contact_id를 사용합니다. – vikki

관련 문제