我正在尝试将下载功能添加到我的应用程序中我正在使用Glide Library从他们的url下载图片这是我在设备存储中保存图片但不能正常工作的代码与android 5.0.1和6.0一起工作正常.1但是在另一个Android版本中效果不佳
Toast.makeText(Pop.this, "Please wait ...", Toast.LENGTH_LONG).show();
new AsyncTask<FutureTarget<Bitmap>, Void, Bitmap>() {
@Override protected Bitmap doInBackground(FutureTarget<Bitmap>... params) {
try {
return params[0].get();
// get needs to be called on background thread
} catch (Exception ex) {
return null;
}
}
@Override protected void onPostExecute(Bitmap bitmap) {
if(bitmap == null) return;
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Art_"+System.currentTimeMillis(), "Beschrijving");
}
}.execute(Glide.with(getApplicationContext()).load(url).asBitmap().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(width, height));
Run Code Online (Sandbox Code Playgroud)
请帮我
我使用Glide在我的Android应用程序中加载图像.
3.5更新后,开发人员提供了GlideModule接口.
根据这篇文章(Disk Cache)我可以设置缓存目录,使用setDiskCache
方法和ExternalCacheDiskCacheFactory
.
但我没有看到任何区别.所有缓存仍在默认缓存目录中的内部存储上.
build.gradle:
dependencies {
...
compile 'com.github.bumptech.glide:glide:3.6.1'
}
Run Code Online (Sandbox Code Playgroud)
Android清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application ...>
<meta-data
android:name="com.myapp.GlideConfig"
android:value="GlideModule" />
</application>
Run Code Online (Sandbox Code Playgroud)
GlideConfig.java:
public class GlideConfig implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
Log.e("GlideConfig", "MEDIA_MOUNTED");
builder.setDiskCache(
context.getString(R.string.app_name),
419430400));//400Mb
//Environment.getExternalStorageDirectory().getPath()
// + "/"
// + context.getString(R.string.app_name)
}
else {
Log.e("GlideConfig", …
Run Code Online (Sandbox Code Playgroud) 我将我的滑行更新为4.3.1但是我全部使用滑动功能.override()
并.placeholder()
获得error: cannot find symbol method
.
Glide.with(this)
.load(imageUrl)
.override(200, 200)
.placeholder(R.drawable.ic_avatar_sign_up)
.into(ivAvatar);
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我做了自己的休息api,现在它只有端点,我显示了一些图像.这是它在spring boot应用程序中的外观
@GetMapping("/image/{name:.+}")
public byte[] getImage(@PathVariable(value = "name") String name) {
return storageService.loadFileAsByteArray(name);
}
Run Code Online (Sandbox Code Playgroud)
这是存储服务方法
public byte[] loadFileAsByteArray(String filename) {
Resource resource = loadFile(filename);
try {
return IOUtils.toByteArray(resource.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
在这里我在我的Android应用程序中做了什么
Glide.with(context!!.applicationContext).load("http://myipaddress/api/image/myimage.jpg").into(it)
Run Code Online (Sandbox Code Playgroud)
所以我从滑翔中得到了什么
根本原因(2/2)
java.io.FileNotFoundException: No content provider: http://myipaddress/api/image/myimage.jpg
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1112)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:964)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:887)
at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:22)
at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:13)
at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44)
at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:299)
at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:394)
at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailed(SourceGenerator.java:119)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:151)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:142)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:65)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:97)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:148)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:142)
at …
Run Code Online (Sandbox Code Playgroud) 有没有人用Glide从后台线程中获取图像?我一直得到这个断言:
java.lang.IllegalArgumentException: You must call this method on the main thread
Run Code Online (Sandbox Code Playgroud)
但根据这个线程,它应该工作:
https://github.com/bumptech/glide/issues/310
然而,我不能让它工作,除非我从主线程中调用它.
这是我试图从主线程做的事情:
Glide.get(mContext);
loadUserImage(userImageUrl);
// wait 5 seconds before trying again
int imageLoadingTimeOut = mContext.getResources().getInteger(R.integer.image_loading_time_out);
if (imageLoadingTimeOut > 0) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if (!mUserImageLoaded) {
loadUserImage(userImageUrl);
}
}
}, imageLoadingTimeOut);
}
}
Run Code Online (Sandbox Code Playgroud)
和loadUserImage:
private boolean mUserImageLoaded = false;
private void loadUserImage(String userImageUrl) {
if (userImageUrl != null && !userImageUrl.isEmpty() && !mUserImageLoaded) {
Glide.with(mContext).using(Cloudinary.getUrlLoader(mContext)).load(userImageUrl).crossFade().listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception …
Run Code Online (Sandbox Code Playgroud) Android Studio 3.0 Beta 5
robolectric:3.3.1
Run Code Online (Sandbox Code Playgroud)
我有一个以下视图持有者使用滑动库加载图像URL.我试图找到一种单元测试的方法:
public class MovieActorsViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.civActorPicture) CircleImageView actorPicture;
@BindView(R.id.tvName) TextView name;
@BindView(R.id.tvCharacter) TextView character;
private Context context;
public MovieActorsViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
context = itemView.getContext();
}
public void populateActor(Actor actor) {
Glide.with(context)
.load(actor.getPicturePath())
.placeholder(R.drawable.people_placeholder)
.into(actorPicture);
name.setText(actor.getName());
character.setText(actor.getCharacter());
}
}
Run Code Online (Sandbox Code Playgroud)
这是我所做的单元测试,但我不知道如何对图像视图进行单元测试.我不确定使用Mockito模拟Glide库会起作用吗?
@RunWith(RobolectricTestRunner.class)
public class MovieActorsViewHolderTest {
private MovieActorsViewHolder movieActorsViewHolder;
@Before
public void setup() {
final Context context = ShadowApplication.getInstance().getApplicationContext();
final View view = LayoutInflater.from(context).inflate(R.layout.movie_actors_item, new LinearLayout(context));
movieActorsViewHolder = new MovieActorsViewHolder(view);
} …
Run Code Online (Sandbox Code Playgroud) 我正在使用滑动来从URL加载图像.当我提取图像时,我在图像视图中显示了一个加载器.正在获取的某些图像较大,因此发生慢速Internet连接超时并引发异常
如何增加超时?
我正在开发一个Android应用程序,向用户显示全屏图像.从服务器获取图像.我正在使用Glide来显示图像.但是我希望在显示实际图像之前显示非常小的模糊图像.缓存图像后,应显示直接全尺寸图像.
图像显示流程如下: - 如果是第一次下载图像,请首先下载小尺寸图像,然后下载全分辨率图像. - 如果之前已下载图像,则直接显示全尺寸图像.
我在Glide库中找不到任何方法,它告诉我缓存中是否存在文件.
任何想法,如何做到这一点.
为什么我在使用时无法解决此方法Glide
我也无法解决.diskstaretegy()
:
Glide.with(getActivity())
.load(chalet.profilePhoto)
.asBitmap() <--- cannot resolve this
.diskCacheStrategy(DiskCacheStrategy.ALL) <--- cannot reslove this
.fitCenter()
.placeholder(R.drawable.logo).dontAnimate().into(mImageView);
Run Code Online (Sandbox Code Playgroud)
我的朋友: -
compile 'com.github.bumptech.glide:glide:4.0.0'
Run Code Online (Sandbox Code Playgroud) apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
classpath 'com.android.tools.build:gradle:3.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.61"
Run Code Online (Sandbox Code Playgroud)
我有上面的gradle配置,但我仍然得到
Could not find method kapt() for arguments [com.github.bumptech.glide:compiler:4.3.1] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
Run Code Online (Sandbox Code Playgroud)
谁能告诉我哪里出错了?我在这里先向您的帮助表示感谢
android ×10
android-glide ×10
gradle ×1
kapt ×1
rest ×1
robolectric ×1
save ×1
testing ×1
timeout ×1
unit-testing ×1