IllegalArgumentException readExceptionFromParcel

10,827

Solution 1

There is something wrong with the phone query URI. From the exception text it looks like it is missing the phone number. Are you sure number is not null and not empty?

Solution 2

This can happen with masked number. http://code.google.com/p/gtalksms/issues/detail?id=27

Solution 3

I don't know if anyone still needs this answer, but I tried until I got it. The problem is that sometimes, the incoming number is null when you either extend PhoneStateListener class, or when passing the last incoming number. I changed my code to this, and it worked fine

@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 );
        }
    }

… this solution is here.

Share:
10,827
user754730
Author by

user754730

Updated on June 07, 2022

Comments

  • user754730
    user754730 about 2 years

    I got this Error from one of my users and i have NO clue how to fix it...

    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)
    

    This is the contactExists funcion i'm calling which (i think) is causing the force close:

    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;
        }
    

    I have also tried to change Phone.CONTENT_FILTER_URI to PhoneLookup.CONTENT_FILTER_URI but it didn't change anything... Does anyone have a clue?

  • user754730
    user754730 about 13 years
    I tried it out with a few different contacts. With name & number, only name, only number... On my Desire nothing happened... Since i dont see what phone those users have, i can't really tell you how the error was created or on which phones it crashes.
  • Nic Strong
    Nic Strong about 13 years
    From the log "content://com.android.contacts/phone_lookup/" the phone number is missing. Put an assertion at the beginning of the method to guard against null or empty phone number
  • Tom
    Tom about 12 years
    Not just null, but I catch the IllegalArgumentException on query() because there exist Android devices without this URI available! Not all of them support SMS/ MMS, especially with the dawn of tablets.