Glide не может загрузить изображение
У меня есть простой макет с ImageView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.vbusovikov.glidetest.MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
</RelativeLayout>
И простое выражение Glide для загрузки изображения в этот ImageView просто для проверки Glide
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView)findViewById(R.id.image);
Glide.with(this)
.load("http://you-ps.ru/uploads/posts/2013-08/1376601606_1273.png")
.error(R.mipmap.ic_launcher)
.into(imageView);
}
Тем не менее, значок ошибки отображается. Что это за проблема? У меня есть прокси-сервер в моей сети и соответствующие gradle.properties для этого случая.
systemProp.http.proxyHost=proxy******.ru
systemProp.http.proxyPort=****
Но даже если я попытаюсь запустить это маленькое приложение без каких-либо прокси, по какой-то причине оно не будет работать.
Мой файл build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.vbusovikov.glidetest"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
testCompile 'junit:junit:4.12'
}
UPD. Это простое приложение может загружать изображения из Интернета, но не может загружать изображения с моего сервера. Некоторые изображения моего сервера загружаются нормально, а другие нет. Я уже потерян с этим
10 ответов
К сожалению, все ответы были правильными, но не работали в моих условиях. Настройки сервера не подходили для загрузки картинок с него.
== UPDATE ==
Через некоторое время я понял, что картинки на моем сервере были сломаны. Вы можете проверить, является ли ваша фотография по указанному URL-адресу действительной, открыв ее в Mozilla Firefox. Последние несколько килобайт на фотографиях могут быть удалены, но такие браузеры, как Google Chrome, игнорируют это и обычно показывают изображение. Однако Firefox более чувствителен, поэтому помогает локализовать проблему.
Я добавляю этот атрибут в манифест
<application
...
android:usesCleartextTraffic="true"
...>
</application>
Возможно, я уже слишком поздно отвечать на него, но если кто-то все еще сталкивается с этой проблемой. Так что я столкнулся с подобной проблемой, когда я не мог загружать изображения с помощью Glide, и после большого исследования я обнаружил, что проблема не в скольжении, а в URL-адресе изображения. Чтобы решить эту проблему, я попытался использовать собственный пользовательский агент, и это сработало для меня.
GlideUrl url = new GlideUrl(imgUrl, new LazyHeaders.Builder()
.addHeader("User-Agent", WebSettings.getDefaultUserAgent(mContext))
.build());
и используйте этот URL для загрузки изображения:
Glide.with(mContext).load(url).into(imageview);
Изображение может быть слишком большим для загрузки, что может вызвать исключение: "Растровое изображение слишком велико для загрузки в текстуру". В этом случае изображение следует масштабировать перед установкой для него View (см . Ответ user1352407)
Скопировано из ответа пользователя1352407:
ImageView iv = (ImageView)waypointListView.findViewById(R.id.waypoint_picker_photo);
Bitmap d = new BitmapDrawable(ctx.getResources() , w.photo.getAbsolutePath()).getBitmap();
int nh = (int) ( d.getHeight() * (512.0 / d.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(d, 512, nh, true);
iv.setImageBitmap(scaled);
Что ж, это случилось со мной: не отображается на эмуляторе, но отображается на реальном устройстве, поэтому я зашел в настройки -> приложения на эмуляторе, нашел ваше приложение и УДАЛИЛ его, когда вы снова запустите его, он сначала установит его снова и вуаля
Попробуйте также добавить тег-заполнитель (выглядит странно, но это исправило меня на моей стороне)
Glide.with(YourActivity.this)
.load("http://you-ps.ru/uploads/posts/2013-08/1376601606_1273.png")
.error(R.mipmap.ic_launcher)
.placeholder(R.mipmap.placeholder)
.into(imageView);
В моем случае я использую слушателя, а в onResourceReady я возвращался
true
, но ты должен вернуться
false
.
Glide.with(context)
.load(url)
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE).listener(object :
RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean,
): Boolean {
imageView.visibility = GONE
errorContainer.visibility = VISIBLE
return true
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean,
): Boolean {
imageView.visibility = VISIBLE
errorContainer.visibility = GONE
return false // <<<<<<<<<<<<<<<<<<<<<<<< here
}
}).into(imageView)
Он работает нормально на моей стороне... проверьте сеть и не забудьте добавить разрешение на доступ в интернет в декларации.:)
сотрите данные для устройства, и оно будет работать идеально