ContentObserver
私のプロジェクトには、連絡先テーブルに変更があったときに呼び出されるのを待っているコードがあります。その場合は、テーブル内のすべての連絡先が変更されているか、作成されているかを 1 つずつ確認します。次に、これに応じて、自分の変更を自分のテーブルに保存します。しかし、それは私にエラーを与えます。これが私のコードです:
while (phones.moveToNext()) {
try {
name = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
JSONObject jobject = db.select_contact(name, phoneNumber);
String type1 = jobject.getString("type");
if (type1.equals("upload")) {
Log.i("********", "Upload on the db" + name + " "
+ phoneNumber);
db.contact_table(name, phoneNumber);
} else if (type1.equals("change_name")) {
db.update_name(name, phoneNumber);
Log.i("********", "Change name and upload " + name);
} else if (type1.equals("change_phone")) {
db.update_name(name, phoneNumber);
Log.i("********", "Change phone and upload "
+ phoneNumber);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
そして、私が作成した自分のテーブルにアップロードする部分があります:
public long update_name(String name, String number) {
ContentValues cv = new ContentValues();
cv.put(NAME, name);
return ourDatabase.update(DATABASE_TABLE_4, cv, NUMBER + "=" + number,
null);
}
public long update_number(String name, String number) {
ContentValues cv = new ContentValues();
cv.put(NUMBER, number);
return ourDatabase
.update(DATABASE_TABLE_4, cv, NAME + "=" + name, null);
}
問題は、DB のアップロード変更の一部で、次のエラーが発生することです。
07-07 09:28:41.412: W/System.err(11667): android.database.sqlite.SQLiteException: near "629": syntax error: , while compiling: UPDATE contacts SET name=? WHERE phone=+34 629 21 00 80
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1936)
07-07 09:28:41.412: W/System.err(11667): at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1887)
07-07 09:28:41.412: W/System.err(11667): at com.background.Database.update_name(Database.java:215)
07-07 09:28:41.417: W/System.err(11667): at com.extract.Contacts.onChange(Contacts.java:69)
07-07 09:28:41.417: W/System.err(11667): at android.database.ContentObserver$NotificationRunnable.run(ContentObserver.java:43)
07-07 09:28:41.417: W/System.err(11667): at android.os.Handler.handleCallback(Handler.java:605)
07-07 09:28:41.417: W/System.err(11667): at android.os.Handler.dispatchMessage(Handler.java:92)
07-07 09:28:41.417: W/System.err(11667): at android.os.Looper.loop(Looper.java:137)
07-07 09:28:41.417: W/System.err(11667): at android.app.ActivityThread.main(ActivityThread.java:4507)
07-07 09:28:41.422: W/System.err(11667): at java.lang.reflect.Method.invokeNative(Native Method)
07-07 09:28:41.422: W/System.err(11667): at java.lang.reflect.Method.invoke(Method.java:511)
07-07 09:28:41.422: W/System.err(11667): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-07 09:28:41.422: W/System.err(11667): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-07 09:28:41.422: W/System.err(11667): at dalvik.system.NativeStart.main(Native Method)