2017-08-18 8 views
2

Firebase Storageを使用してAndroid上で画像のリストを取得していますが、アプリが起動されるたびにこのリストがダウンロードされます。Androidの保存を永続化し、必要な場合にのみダウンロードします。だから、既にダウンロードされる画像がスマートフォンにあるかどうかを確認する必要があります。 FirebaseDatabaseを使用してファイルの名前を保存しています。データベースについては、永続性をチェックできます。私はデバイスのストレージにイメージを保存する必要があると思いますが、ダウンロードする前に確認することは知らないので、可能な場合は永続性FirebaseStorageを設定するのが最善の方法です。AndroidのFirebase Storageで永続性を設定する方法は?

私のコードは次のようになります。

FirebaseDatabase:

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference databaseReference = database.getReference().child("nomes_imagens"); 

     final Map<String,Object> mapNomesImagens = new HashMap<>(); 

     databaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Log.i(TAG,"onDataChanged()"); 
       Iterator<DataSnapshot> iterator = dataSnapshot.getChildren().iterator(); 

       while(iterator.hasNext()) { 
        DataSnapshot snapshot = iterator.next(); 
        mapNomesImagens.put(snapshot.getKey(),snapshot.getValue()); 
        n1++; 
       } 

       makeList(mapNomesImagens); 
       Log.i(TAG,"Mapa: " + mapNomesImagens.toString()); 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.i(TAG,"onCancelled"); 
      } 
     }); 

FirebaseStorage:オフラインデータストレージのために意図された可能

public boolean makeList(Map<String,Object> map) { 
    final FirebaseStorage storage = FirebaseStorage.getInstance(); 

    try { 
     Set<String> set = map.keySet(); 

     for(final String nomeExercicio : set) { 

      String nomeArquivo = String.valueOf(map.get(nomeExercicio)); 

      final File localFile = File.createTempFile("ImagensExercicios","bmp"); 
      storage.getReference().child("ImagensExercicios").child(nomeArquivo).getFile(localFile). 
        addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
         @Override 
         public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 
          Log.i(TAG,"onSuccess()"); 
          Bitmap bitmap; 
          bitmap = BitmapFactory.decodeFile(localFile.getAbsolutePath()); 
          Exercicio exercicio = new Exercicio(nomeExercicio,bitmap); 
          exercicios.add(exercicio); 
          n++; 
         } 
        }). 
        addOnFailureListener(new OnFailureListener() { 
         @Override 
         public void onFailure(@NonNull Exception e) { 
          Log.i(TAG,"onFailure() " + e.getMessage()); 
         } 
        }). 
        addOnCompleteListener(new OnCompleteListener<FileDownloadTask.TaskSnapshot>() { 
         @Override 
         public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) { 
          Log.i(TAG,"onComplete()"); 
          } 

         } 
        }); 
     } 

     return true; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return false; 
} 

答えて

0

私の知る限りのsetpersistence。インターネットが利用可能になると、それは更新されます。

グライドライブラリを使用してキャッシュを処理できます。以下に示すグライドによる公式のfirebaseの使用は十分でなければなりません。

リンク:https://github.com/firebase/FirebaseUI-Android/tree/master/storage

単に FirebaseImageLoaderクラスを使用し、StorageReferenceからイメージをロードする:

// Reference to an image file in Cloud 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); 
関連する問題