2013-08-10 5 views
0

Я получаю следующее сообщение об ошибке на некоторых устройствах при попытке загрузить некоторые фотографии контакта в CursorAdapter:SQLiteException пытается загрузить фотографию контакта с Пикассо

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) 

Запрос SQL используется, чтобы получить поток фотографий является недействительным.

Вот как я загружаю изображение:

Опросить 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); 
} 

Пропускают полученный Cursor к адаптеру. Получить фотографию контакта URI, как так:

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

нагрузки, что фото с использованием Picasso:

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

Как я уже говорил, исключение происходит только на некоторых устройствах. Обманирование вызова Picasso в try/catch, к сожалению, ничего не делает, поскольку изображение загружается асинхронно. Я мог бы создать AsyncTask и загрузить изображение синхронно, но тогда в чем смысл использования Picasso?

+0

Я делаю что-то подобное ЗДЕСЬ !!! http: //stackoverflow.com/questions/18808114/picasso-loading-of-image-spawned-inside-asynctask – toobsco42

+0

Проблема может заключаться в том, что вы должны быть разными в зависимости на версию андроида. Взгляните на нижнюю часть примера https://github.com/square/picasso/blob/master/picasso-sample/src/main/java/com/example/picasso/SampleContactsActivity.java. Будет проверка для того чтобы увидеть если оно использует Honeycomb. Возможно, вам потребуется реструктурировать запрос для определенных версий Android. – toobsco42

ответ

0

Клонирование обновленного кода Picasso и создание банки само исправляло проблему. Я слышал, что они планируют новый официальный релиз в ближайшее время.