Я получаю следующее сообщение об ошибке на некоторых устройствах при попытке загрузить некоторые фотографии контакта в 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
?
Я делаю что-то подобное ЗДЕСЬ !!! http: //stackoverflow.com/questions/18808114/picasso-loading-of-image-spawned-inside-asynctask – toobsco42
Проблема может заключаться в том, что вы должны быть разными в зависимости на версию андроида. Взгляните на нижнюю часть примера https://github.com/square/picasso/blob/master/picasso-sample/src/main/java/com/example/picasso/SampleContactsActivity.java. Будет проверка для того чтобы увидеть если оно использует Honeycomb. Возможно, вам потребуется реструктурировать запрос для определенных версий Android. – toobsco42