2012-09-06 3 views
0

나는 안드로이드 전화 번호부에 연락처를 보여주고 추가하는 작은 응용 프로그램을 작성하려고합니다. 이 방법으로 연락처를 추가합니다.안드로이드 추가 연락처

ContentValues cv = new ContentValues(); 
EditText te1 = (EditText)findViewById(R.id.EditText1); 
EditText te2 = (EditText)findViewById(R.id.EditText2); 
cv.put(ContactsContract.Data.RAW_CONTACT_ID, 400); 
cv.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
cv.put(ContactsContract.CommonDataKinds.Phone.NUMBER, te2.getText().toString()); 
cv.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); 
cv.put(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, te1.getText().toString()); 
ContentResolver contentResolver = getContentResolver(); 
contentResolver.insert(ContactsContract.Data.CONTENT_URI, cv); 
setContentView(R.layout.main); 

코드는 성공적으로 실행되지만 작동하지 않는 것처럼 보입니다. 누군가 내 실수를 저에게 지적 할 수 있습니까? 로그 캣 출력 :

I/Database(14340): sqlite returned: error code = 1, msg = table data has no column named display_name 
E/Database(14340): Error inserting display_name=jsmith data1=57457644 data4=44675475 data2=2 mimetype_id=5 raw_contact_id=400 
E/Database(14340): android.database.sqlite.SQLiteException: table data has no column named display_name: , while compiling: INSERT INTO data(display_name, data1, data4, data2, mimetype_id, raw_contact_id) VALUES(?, ?, ?, ?, ?, ?); 
E/Database(14340): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
E/Database(14340): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92) 
E/Database(14340): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65) 
E/Database(14340): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83) 
E/Database(14340): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41) 
E/Database(14340): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1157) 
E/Database(14340): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1577) 
E/Database(14340): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1434) 
E/Database(14340): at com.android.providers.contacts.ContactsProvider2$DataRowHandler.insert(ContactsProvider2.java:1032) 
E/Database(14340): at com.android.providers.contacts.ContactsProvider2$CommonDataRowHandler.insert(ContactsProvider2.java:1388) 
E/Database(14340): at com.android.providers.contacts.ContactsProvider2$PhoneDataRowHandler.insert(ContactsProvider2.java:1638) 
E/Database(14340): at com.android.providers.contacts.ContactsProvider2.insertData(ContactsProvider2.java:2649) 
E/Database(14340): at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:2478) 
E/Database(14340): at com.android.providers.contacts.SemcContactsProvider2.insertInTransaction(SemcContactsProvider2.java:851) 
E/Database(14340): at com.android.providers.contacts.SQLiteContentProvider.insert(SQLiteContentProvider.java:95) 
E/Database(14340): at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:2294) 
E/Database(14340): at com.android.providers.contacts.SemcContactsProvider2.insert(SemcContactsProvider2.java:778) 
E/Database(14340): at android.content.ContentProvider$Transport.insert(ContentProvider.java:198) 
E/Database(14340): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146) 
E/Database(14340): at android.os.Binder.execTransact(Binder.java:324) 
E/Database(14340): at dalvik.system.NativeStart.run(Native Method) 
E/Database(14340): Error inserting min_match=4467547 normalized_number=44675475 data_id=-1 raw_contact_id=400 using INSERT OR REPLACE INTO phone_lookup(min_match, normalized_number, data_id, raw_contact_id) VALUES(?, ?, ?, ?); 
+0

것 "작동하지 않습니다 그래서이 방법으로 코드를 수정 승 당신은 글고 치기에 액세스 "의미? 어떤 logcat 말합니다? –

+0

시도해보십시오 ... 작동 할 것입니다. 나는 이것을 다음과 같이 사용했습니다 : http : //stackoverflow.com/questions/4744187/how-to-add-new-contacts-in-android –

+0

실례합니다. logcat 출력을 추가했습니다. – user1256821

답변

0

처음에 표시 O를 당신에게 문제 의 원인이 그/--->

setContentView(R.layout.main);// put in the beginning of code 
ContentValues cv = new ContentValues(); 
EditText te1 = (EditText)findViewById(R.id.EditText1); 
EditText te2 = (EditText)findViewById(R.id.EditText2); 
cv.put(ContactsContract.Data.RAW_CONTACT_ID, 400); 
cv.put(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
cv.put(ContactsContract.CommonDataKinds.Phone.NUMBER, te2.getText().toString()); 
cv.put(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); 
cv.put(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, te1.getText().toString()); 
ContentResolver contentResolver = getContentResolver(); 
contentResolver.insert(ContactsContract.Data.CONTENT_URI, cv); 
+0

답변 해 주셔서 감사합니다. 하지만 당신의 가정이 틀렸다고 생각합니다. 내 응용 프로그램에는 두 개의 레이아웃이 있으며 두 번째 레이아웃에서 연락처를 만들 수 있습니다. 사용자가 'save'버튼을 누르면 위의 코드를 사용하여 첫 번째 레이아웃으로 다시 이동합니다. – user1256821

+0

로그 스택에 따라 sqlite : insert 쿼리 ("data"라는 테이블이있는 테이블)를 다시 점검해야한다는 것을 알 수 있습니다. 여기에 삽입 쿼리를 게시 할 수 있도록 내가 수정할 수 있습니다. –