10

Google firebase プラットフォームのストレージから画像をキャッシュする方法を探しています。今のところ、画像をダウンロードしてユーザーに表示することはできますが、インターネットに接続していなくても、これをキャッシュしてアクセスすることはできません。データベースにはオフラインでアクセスできます。だから私は、保存する方法もあるだろうと考えました。すべてのイメージをストレージにダウンロードしたくありません。イメージがまだ最新の場合は、変更される可能性があるため、毎回確認する必要があります。ここに私が見つけることができるいくつかのリンクがありますが、私の質問に対する答えはありません. 誰かが回避策、またはそれを達成する方法を知っているかもしれません。ありがとう!

ファイルのダウンロード: https://firebase.google.com/docs/storage/android/download-files

キャッシュ (オフライン) データベース: https://firebase.google.com/docs/database/android/offline-capabilities

更新 1

picassoでファイルを「キャッシュ」する方法は次のとおりです。ダウンロードを気にするアクティビティを追加しました。

Picasso.with(getApplicationContext())
                            .load(uri.toString())
                            .networkPolicy(NetworkPolicy.OFFLINE)
                            .into(image1);

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

7

@ATom の通知に感謝します。API が変更され、FirebaseUI 3.0 は Glide 4.x を使用するようになりました。更新されたサンプルは次のとおりです。

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());
    }
}

次に、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);

そして、あなたの依存関係を追加することを忘れないでくださいbuild.gradle:

implementation 'com.firebaseui:firebase-ui-:3.1.0'

GitHub の回答元

古い答え:

FirebaseUI 1.0 がリリースされました。ストレージの例にはクラスFirebaseImageLoaderがあります

FirebaseImageLoader を使用して表示される画像は、パスごとに Firebase Storage にキャッシュされるため、繰り返しの読み込みが高速になり、帯域幅が節約されます。

    // Reference to an image file in Firebase Storage
    StorageReference storageReference = ...;

    // ImageView in your Activity
    ImageView imageView = ...;

    // Load the image using Glide
    Glide.with(this /* context */)
            .using(new FirebaseImageLoader())
            .load(storageReference)
            .into(imageView);
于 2016-11-11T09:10:56.693 に答える
2

同じ問題がありました。考えられるすべての方法を試しましたが、修正できませんでした。問題は、firebase storage によって生成されたリンクにあると思います。Picasso は通常、読み込んだ画像をキャッシュします。リンクが画像形式(例:.jpg)で終わるcloudinary、LibPixelなどの他のクラウドサービスを試してみました.picassoはこれらのリンク画像をキャッシュします. firebase リンクはトークン番号で終わります。それが失敗する奇妙なこと!

于 2016-11-09T14:42:38.050 に答える