Picasso не загружает изображение
здесь код для пикассо:
ImageView img = (ImageView)findViewById(R.id.product_image);
Picasso.with(this)
.load(_url)
.fit()
.into(img, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
});
здесь значение _url: http://kiagallery.ir/Images/Upload/Collection%20101/Spring%20101/d4a03b66dc7b46c694615c549b78b2e9.jpg
и здесь xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/product_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/product_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:layout_below="@id/product_image"/>
<TextView
android:id="@+id/product_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:layout_below="@id/product_name"/>
</RelativeLayout>
поскольку вы можете видеть, что изображение можно получить через браузер, но picasso не загружает его, я проверил функцию onError и никогда не звонил, я потерял здесь молча, любая помощь будет оценена.
EDIT: Когда я задаю фиксированное значение ширины и высоты изображения, равное 200dp, оно загружает изображение, но когда я меняю его на wrap_content, оно не отображает изображение.
Ответы
Ответ 1
Я предполагаю, что вы не должны называть этот метод fit()
в Picasso, а ваш ImageView
имеет ширину и высоту, определенные WRAP_CONTENT
.
Этот метод ждет, пока не будет измерено значение ImageView
, и измените размер изображения так, чтобы он точно соответствовал его размеру. Хотя ваш ImageView
имеет размер, определенный WRAP_CONTENT
, тогда методы getMeasuredWidth()
и getMeasuredHeight()
, казалось бы, возвращают 0, что делает ваш ImageView
невидимым.
Ответ 2
Не забудьте добавить разрешение на манифест
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
Ответ 3
Если вы используете networkPolicy (NetworkPolicy.OFFLINE), возможно, вы не получите изображения с помощью Picasso.
Ответ 4
Я столкнулся с аналогичной проблемой, где у меня было ViewPager
изображений, размещенных внутри полноэкранного DialogFragment
. Тот же ViewPager отлично работал при размещении в другом месте, и Picasso загрузил изображения, как ожидалось. Но только при размещении в полноэкранном режиме DialogFragment
некоторые изображения будут пустыми. Казалось, что изображения были успешно доставлены с сервера и загружены в ImageView
, но ImageView
по-прежнему отображается пустым.
Ни один из вышеперечисленных ответов или похожих тем не работал у меня.
Итак, я переключился на другую большую библиотеку под названием Glide. Это в значительной степени похоже на Пикассо.
Подробнее здесь и здесь.
Несмотря на то, что это может быть не самый важный ответ, возможно, стоит сделать снимок для кого-то, у которого возникла аналогичная проблема.