Question

I'm getting the following error on some devices when trying to load some contact photos in a CursorAdapter:

java.lang.RuntimeException: An unexpected exception occurred
at com.squareup.picasso.Request$1.void run()(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: near "AND": syntax error: , while compiling: SELECT DISTINCT data15 FROM view_data_restricted data WHERE ( AND _id=photo_id1 AND _id=photo_id AND contact_id=?)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:358)
at android.content.ContentResolver.query(ContentResolver.java:321)
at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:1968)
at com.squareup.picasso.Utils$ContactPhotoStreamIcs.java.io.InputStream get(android.content.ContentResolver,android.net.Uri)(Unknown Source)
at com.squareup.picasso.Utils.boolean parseResponseSourceHeader(java.lang.String)(Unknown Source)
                          java.io.File createDefaultCacheDir(android.content.Context)
                          java.io.InputStream getContactPhotoStream(android.content.ContentResolver,android.net.Uri)
at com.squareup.picasso.Picasso.android.graphics.Bitmap loadFromType(com.squareup.picasso.Request)(Unknown Source)
at com.squareup.picasso.Picasso.android.graphics.Bitmap resolveRequest(com.squareup.picasso.Request)(Unknown Source)
at com.squareup.picasso.Picasso.void run(com.squareup.picasso.Request)(Unknown Source)
at com.squareup.picasso.Request.void run()(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
at com.squareup.picasso.Utils$PicassoThread.void run()(Unknown Source)

The SQL query being used to get the photo stream is invalid.

Here's how I'm loading the image:

Query the ContactsContract:

public static final String[] PROJECTION = { Contacts._ID, Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME_PRIMARY,
        Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.CommonDataKinds.Email.DATA };
public static final String SELECTION = ContactsContract.CommonDataKinds.Email.DATA + " <> '' AND "
        + Contacts.IN_VISIBLE_GROUP + "=1";
public static final String ORDER_BY = Contacts.SORT_KEY_PRIMARY;

@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
    return new CursorLoader(this, ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, SELECTION, null,
            ORDER_BY);
}

Pass the resulting Cursor to an adapter. Get a contact photo URI like so:

Uri photoUri = Contacts.getLookupUri(cursor.getLong(cursor.getColumnIndex(Contacts._ID)),
                cursor.getString(cursor.getColumnIndex(Contacts.LOOKUP_KEY)));

Load that photo using Picasso:

Picasso.with(context).load(photoUri).placeholder(R.drawable.ic_contact_picture).into(photo);

As I said, the exception only occurs on some devices. Wrapping the Picasso call in a try/catch unfortunately does nothing, because the image is being loaded asynchronously. I could create an AsyncTask and load the image synchronously, but then what's the point of using Picasso?

Was it helpful?

Solution

Cloning the updated Picasso code and building the jar myself fixed the problem. I've heard they're planning a new official release soon.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top