답변

1

안드로이드 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(); 
} 
+0

노하우가이를 극복? 모든 숫자를 쿼리해야합니까, Java에서 각각의 다듬기 작업을 수행하고, 검색된 숫자와 비교하고, ID를 저장하고, 일치하는 경우 삭제합니까? 내게 많은 오버 헤드처럼 보입니다. 바로 가기가 없습니까? –

+0

도움이 될 것입니다 : http://stackoverflow.com/questions/16180117/instr-function-sqlite-for-android. 내 대답에 추가했습니다 – metafa

+0

좋은데, 내가 그걸 줄거야. –

관련 문제