私はそれらのほとんどすべてを試してみましたが、回答が重複していますが、GlideでFirebaseストレージイメージを使用することはできません。
まず、 docs を使用しています
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);
glideの.using部分、logcatをクリーニングすると、次のエラーが発生します。
E/GlideExecutor:キャッチされていないスロー可能なcom.bumptech.glide.Registry $ NoModelLoaderAvailableExceptionをスローしたリクエスト:モデルのModelLoaderが見つかりませんでした:gs://123...appspot.com/sorular/1.jpg
com.bumptech.glide.Registry.getModelLoaders(Registry.Java:227)
com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.Java:179)at com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.Java:197)at 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)at Java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.Java:607)at Java.lang.Thread.run( Thread.Java:761)
com.bumptech.glide.load.engine.executor.GlideExecutor $ 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'
}
これを変える:
_ implementation 'com.firebaseui:firebase-ui-storage:2.0.1'
_
これに:
_ implementation 'com.firebaseui:firebase-ui-storage:3.2.1'
_
Glideのドキュメントによると:
using()
Using()APIはGlide 4で削除され、ユーザーがコンポーネントをAppGlideModuleに一度登録して、オブジェクトの再利用を回避するように促しています。イメージを読み込むたびに新しいModelLoaderを作成するのではなく、AppGlideModuleに一度登録して、Glideにモデル(load()に渡すオブジェクト)を検査させ、登録されたModelLoaderをいつ使用するかを判断させます。
特定のモデルに対してのみModelLoaderを使用するようにするには、上記のようにhandles()を実装して各モデルを検査し、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());
}
}
_
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);
_
詳細はこちら: https://github.com/firebase/FirebaseUI-Android/tree/master/storage
I Know im bit late but it might help some of you.
Use both of these in gradle.
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
Then add This Class:
@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);
At last you need to go to File-> Invalidate Cache and Restart
Done:)
上記の答えは私を助けませんでした。
私は私のグラドルでこれを逃していました。
annotationProcessor 'com.github.bumptech.glide:compiler:4.x'
私が見つけた最高のドキュメントは here です
Firebaseストレージにアイコンの小さな画像をアップロードした場合は、グライドとその「モデル」を削除してください。 gitに多くの変更を加えます。したがって、コードは次のようになります。
StorageReference referenseLcl = FirebaseStorage.getInstance().getReference();
StorageReference islandRefLcl = referenseLcl.child(userLcl.getImageIconPath());
final long ONE_MEGABYTE = 1024 * 1024;
islandRefLcl.getBytes(ONE_MEGABYTE).addOnSuccessListener(bytesPrm -> {
Bitmap bmp = BitmapFactory.decodeByteArray(bytesPrm, 0, bytesPrm.length);
imageOfUser.setImageBitmap(bmp);
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
imageOfUser.setImageResource(R.mipmap.ic_launcher);
}
});
Glide 4.6.1に関しては、.using(new FirebaseImageLoader())
は使用できません
強制的にダウングレードします
implementation 'com.github.bumptech.glide:glide:3.8.0'
およびFirebase UIimplementation'com.firebaseui:firebase-ui-storage:2.0.1'