0
다음 쿼리가 실패하고 그 이유를 모르겠습니다. 메서드에 전달 된 문자열 목록에있는 모든 숫자를 삭제해야합니다. 먼저 MIME 형식을 의심했지만 "LIKE? AND"+ Data.MIMETYPE + "=?"도 해결되지 않습니다.모든 연락처에서 전화 번호를 삭제하십시오.
다음 쿼리가 실패하고 그 이유를 모르겠습니다. 메서드에 전달 된 문자열 목록에있는 모든 숫자를 삭제해야합니다. 먼저 MIME 형식을 의심했지만 "LIKE? AND"+ Data.MIMETYPE + "=?"도 해결되지 않습니다.모든 연락처에서 전화 번호를 삭제하십시오.
안드로이드 db 및 인수에서 전화 번호의 형식을 확인하십시오. 안드로이드의 숫자가 공백으로 저장되는 경우가 드물지 않습니다 (즉, +12 345 678 910). 위 쿼리를 사용하면 공백없이 숫자와 일치하지 않게됩니다.
모호성을 해결하려면 instr() function SQLITE for Android? 쿼리에서 직접 REPLACE와 같은 기능을 사용할 수 있습니다.
그래서 함수는 다음과 같이 밝혀 질 수있다 :
public static void deleteAllNumbersFromAllContacts(final Context context, final List<String> numbers) {
new Thread(new Runnable() {
@Override
public void run() {
try {
final ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
for (String number : numbers) {
number = PhoneNumberUtil.toE164(number);
ops.add(ContentProviderOperation
.newDelete(ContactsContract.Data.CONTENT_URI)
.withSelection(
"REPLACE(" + ContactsContract.CommonDataKinds.Phone.NUMBER
+ ", ' ', '') LIKE ?", new String[] { "%" + number + "%" }).build());
}
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (final Exception e) {
e.printStackTrace();
}
}
}).start();
}
노하우가이를 극복? 모든 숫자를 쿼리해야합니까, Java에서 각각의 다듬기 작업을 수행하고, 검색된 숫자와 비교하고, ID를 저장하고, 일치하는 경우 삭제합니까? 내게 많은 오버 헤드처럼 보입니다. 바로 가기가 없습니까? –
도움이 될 것입니다 : http://stackoverflow.com/questions/16180117/instr-function-sqlite-for-android. 내 대답에 추가했습니다 – metafa
좋은데, 내가 그걸 줄거야. –