meh*_*met 9 android firebase android-gradle-plugin android-glide firebaseui
我尝试了几乎所有这些答案都有大量的重复答案,但我仍然无法使用Glide的Firebase存储图像.
首先我使用的是文档
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReference();
StorageReference pathReference = storageRef.child("sorular/1.jpg");
// ImageView in your Activity
ImageView imageView = rootView.findViewById(R.id.imageView);
// Load the image using Glide
Glide.with(this /* context */)
.using(new FirebaseImageLoader()) // Cannot resolve method 'using
.load(pathReference)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
如果我清理Glide的.using部分,logcat就会出现这个错误:
E/GlideExecutor:请求抛出未捕获的throwable com.bumptech.glide.Registry $ NoModelLoaderAvailableException:无法在com.bumptech.glide中找到模型的任何ModelLoaders:gs:
//123...appspot.com/sorular/1.jpg. Registry.getModelLoaders(Registry.java:227)
位于com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:179)的com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java: 197)com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:41)at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:282)at com.bumptech.glide .load.engine.DecodeJob.runWrapped(DecodeJob.java:249)at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:222)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java) :1133)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:607)at java.lang.Thread.run(Thread.java:761)
at com.bumptech.glide.load.engine.executor. GlideExe cutor $ DefaultThreadFactory $ 1.run(GlideExecutor.java:347)
那么如何以最好的方式在我的Android应用程序中使用firebase存储图像呢?
这也是我的构建gradle依赖项:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:palette-v7:27.0.2'
implementation "com.android.support:cardview-v7:27.0.2"
implementation "com.android.support:recyclerview-v7:27.0.2"
implementation "com.android.support:support-v4:27.0.2"
implementation 'com.android.support:design:27.0.2'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.github.florent37:materialviewpager:1.2.3'
implementation 'com.google.firebase:firebase-database:11.8.0'
implementation 'com.google.firebase:firebase-storage:11.8.0'
implementation 'com.firebaseui:firebase-ui-storage:2.0.1'
implementation 'com.google.firebase:firebase-auth:11.8.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*dad 14
改变这个:
implementation 'com.firebaseui:firebase-ui-storage:2.0.1'
Run Code Online (Sandbox Code Playgroud)
对此:
implementation 'com.firebaseui:firebase-ui-storage:3.2.1'
Run Code Online (Sandbox Code Playgroud)
根据Glide文档:
using()
在Glide 4中删除了using()API,以鼓励用户使用AppGlideModule注册其组件一次,以避免重复使用对象.每次加载图像时都不是创建一个新的ModelLoader,而是在AppGlideModule中注册一次,然后让Glide检查你的模型(你传递给load()的对象)以确定何时使用你注册的ModelLoader.
要确保仅对某些模型使用ModelLoader,请按上面所示实现handle()以检查每个模型,并仅在应使用ModelLoader时返回true.
using() 从Glide 4中移除.
要解决此问题,您需要执行以下操作:要从StorageReference加载图像,请首先注册AppGlideModule:
@GlideModule
public class MyAppGlideModule extends AppGlideModule {
@Override
public void registerComponents(Context context, Glide glide, Registry registry) {
// Register FirebaseImageLoader to handle StorageReference
registry.append(StorageReference.class, InputStream.class,
new FirebaseImageLoader.Factory());
}
}
Run Code Online (Sandbox Code Playgroud)
创建AppGlideModule类并完成干净构建后,可以使用GlideApp将StorageReference加载到ImageView中:
// Reference to an image file in Cloud Storage
StorageReference storageReference = ...;
// ImageView in your Activity
ImageView imageView = ...;
// Download directly from StorageReference using Glide
// (See MyAppGlideModule for Loader registration)
GlideApp.with(this /* context */)
.load(storageReference)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
更多信息:https://github.com/firebase/FirebaseUI-Android/tree/master/storage
小智 6
我知道我有点晚了,但它可能对你们中的一些人有所帮助。在app build.gradle.
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' //For Kotlin You should use kapt instead of annotationProcessor though.
Run Code Online (Sandbox Code Playgroud)
然后添加这个类:
@GlideModule
public class MyAppGlideModule extends AppGlideModule {
@Override
public void registerComponents(Context context, Glide glide, Registry registry) {
// Register FirebaseImageLoader to handle StorageReference
registry.append(StorageReference.class, InputStream.class,
new FirebaseImageLoader.Factory());
}
}
GlideApp.with(getActivity()).load(storageReference).into(profileImg);
Run Code Online (Sandbox Code Playgroud)
最后你需要去 File-> Invalidate Cache and Restart Done :)
| 归档时间: |
|
| 查看次数: |
8526 次 |
| 最近记录: |