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开发者_StackOverflow社区.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?
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?
This can happen with masked number. http://code.google.com/p/gtalksms/issues/detail?id=27
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.
精彩评论