web-dev-qa-db-ja.com

GlideでFirebase Storageイメージを使用する

私はそれらのほとんどすべてを試してみましたが、回答が重複していますが、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'
}
9
mehmet

これを変える:

_ 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

14
Peter Haddad
    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:)
0
Vikash Sharma

上記の答えは私を助けませんでした。

私は私のグラドルでこれを逃していました。

annotationProcessor 'com.github.bumptech.glide:compiler:4.x'

私が見つけた最高のドキュメントは here です

0
nburn42

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);
                    }
                });
0
CodeToLife

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'

0
GGWP