2011-06-14 3 views
6

내 사용자 중 하나에서이 오류가 있고 난 어떻게 문제를 해결하는 실마리 ...는 IllegalArgumentException readExceptionFromParcel

java.lang.IllegalArgumentException가 DatabaseUtils.readExceptionFromParcel()

java.lang.IllegalArgumentException: URI: content://com.android.contacts/phone_lookup/, calling user: com.piroja.contactpicker, calling package:com.piroja.contactpicker at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:144) 
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330) 
at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 
at android.content.ContentResolver.query(ContentResolver.java:245) 
at com.piroja.contactpicker.ContactPicker.contactExists(ContactPicker.java:257) 
at com.piroja.contactpicker.ContactPicker$6$1.onClick(ContactPicker.java:138) 
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:161) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4627) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
at dalvik.system.NativeStart.main(Native Method) 

이이 없다 (내 생각) 내가 호출있어 contactExists의 funcion 가까운 힘을 일으키는 :

public boolean contactExists(Context context, String number) { 
     try { 
      Uri lookupUri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri 
        .encode(number)); 
      String[] mPhoneNumberProjection = { Phone._ID, Phone.NUMBER, 
        Phone.DISPLAY_NAME }; 
      Cursor cur = context.getContentResolver().query(lookupUri, 
        mPhoneNumberProjection, null, null, null); 
      try { 
       if (cur.moveToFirst()) { 
        return true; 
       } 
      } finally { 
       if (cur != null) 
        cur.close(); 
      } 
     } catch (IllegalArgumentException iae) { 
      return false; 
     } 
     return false; 
    } 
나는 또한 Phone.CONTENT_을 변경 시도

FILTER_URI를 PhoneLookup.CONTENT_FILTER_URI (으)로 변경했지만 아무 것도 변경하지 않았습니다 ... 단서가 있습니까?

답변

11

전화 쿼리 URI에 문제가 있습니다. 예외 텍스트에서 전화 번호가 누락 된 것 같습니다. 확실한 숫자가 null이 아니고 비어 있지 않습니까?

+0

몇 가지 다른 연락처로 시도해 보았습니다. 이름과 번호, 이름 만, 번호 만 ... 내 욕망에 아무 일도 없었어. 그 사용자가 어떤 전화를 가지고 있는지 알지 못하기 때문에 오류가 어떻게 생성되었는지 또는 어떤 전화기에서 오류가 발생했는지는 알 수 없다. – user754730

+0

어떤 아이디어? 해결 방법이 있습니까? – user754730

+0

"content : //com.android.contacts/phone_lookup/"로그에서 전화 번호가 누락되었습니다. 메소드의 시작 부분에 null 또는 빈 전화 번호를 방지하기 위해 어설 션을 넣으십시오. –

1

아직도이 답변이 필요한 사람이 있는지는 잘 모르겠지만 시도 할 때까지 시도했습니다. 문제는 가끔 PhoneStateListener 클래스를 확장하거나 마지막 수신 번호를 전달할 때 들어오는 번호가 null 인 경우입니다. 이 솔루션은 here입니다 ... 나는이 내 코드를 변경, 그것은

@Override 
public void onReceive(final Context context, final Intent intent) { 
    Log.d("APP", "ACTION:" + intent.getAction()); 
    final String stringExtra = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
    if (TelephonyManager.EXTRA_STATE_RINGING.equals(stringExtra)) { 
      final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Log.d("APP", "incoming,ringing:" + incomingNumber); 
     } else if (stringExtra.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Log.d("APP", "hanged" + incomingNumber); 
     } else if (stringExtra.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
      final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Log.d("APP", "answered" + incomingNumber); 
     } 
    } 

을했다.