IllegalArgumentException readExceptionFromParcel
-
27-10-2019 - |
Question
J'ai obtenu cette erreur d'un de mes utilisateurs et j'ai pas la moindre idée comment le résoudre ...
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)
Ceci est le contactExists Función j'appelle qui (je pense) est à l'origine de la clôture de la force:
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;
}
J'ai aussi essayé de changer Phone.CONTENT_FILTER_URI à PhoneLookup.CONTENT_FILTER_URI mais il n'a rien de changement ... Est-ce que quelqu'un a une idée?
La solution
Il y a quelque chose de mal avec l'URI requête de téléphone. A partir du texte d'exception, il semble que ce manque le numéro de téléphone. Êtes-vous sûr nombre est non nul et non vide?
Autres conseils
Cela peut se produire avec le numéro masqué. http://code.google.com/p/gtalksms/issues/detail ? id = 27
Je ne sais pas si quelqu'un a encore besoin de cette réponse, mais j'ai essayé jusqu'à ce que je l'ai eu. Le problème est que parfois, le numéro entrant est null
lorsque vous étendez une ou l'autre classe PhoneStateListener
, ou lors du passage du dernier numéro entrant. J'ai changé mon code pour cela, et il a bien fonctionné
@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 );
}
}
... cette solution est ici .