我使用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。这个简单的应用程序可以从Internet加载图片,但它无法从我的服务器加载图片。我的服务器的一些图片正在加载正常,但其他图片没有。我已经失去了这个
答案 0 :(得分:0)
它在我身边工作得很好..检查网络并且不要忘记在清单中添加互联网权限。:)
答案 1 :(得分:0)
尝试添加占位符标签(看起来很奇怪,但这使我固定在我身边)
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);
答案 2 :(得分:0)
不幸的是,所有答案都是正确的,但不符合我的条件。服务器设置不适合从中下载图片。
== UPDATE ==
在我发现之后,我服务器上的图片被打破了。您可以通过在Mozilla Firefox中打开此网址来检查您提供的网址上的图片是否有效。 图片中的最后几千字节可能会被删除,但谷歌浏览器等浏览器会忽略它并正常显示图像。但是,Firefox更敏感,因此有助于本地化问题。
答案 3 :(得分:0)
在图像网址中使用HTTP插入的https。
答案 4 :(得分:0)
图片可能太大而无法加载,这可能会引发异常:“位图太大而无法上传到纹理中”。在这种情况下,应先缩放图像,然后再将其设置为“查看”(请参见user1352407's answer)
从user1352407的答案中复制:
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);
答案 5 :(得分:0)
就我而言,我使用的是侦听器,而在 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)
答案 6 :(得分:0)
我可能来不及回答它,但如果有人仍然面临这个问题。 所以我遇到了类似的问题,我无法使用 Glide 加载图像,经过大量研究,我发现问题不是来自 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);