кэшировать изображение и отображать в FirestoreRecyclerAdapter - PullRequest
0 голосов
/ 03 марта 2020

я пытаюсь кэшировать изображение, которое я получаю из FireStorage и отображаю в программе повторного просмотра с помощью (Picasso или glide), но это не работает со мной ** ** я хочу кэшировать изображение и использовать его, когда устройство go офлайн

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_main, parent, false);
    return new ViewHolder(v);
}

class ViewHolder extends RecyclerView.ViewHolder {
    private AppCompatImageView imageViewIv;
    private MaterialTextView nameTv;

    ViewHolder(@NonNull View itemView) {
        super(itemView);
        imageViewIv = itemView.findViewById(R.id.iv_cardview);
        nameTv = itemView.findViewById(R.id.tv_cardview_name);

    }

    void bind(StudentModel model) {
        nameTv.setText(model.getName());
        StorageReference reference = FirebaseStorage.getInstance().getReference().child("student photo/" + model.getName());
        reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Glide.with(context).load(uri).fitCenter().centerCrop().into(imageViewIv);
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(context, "failed to load images", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

, и это класс фрагмента, содержащий адаптер повторного просмотра, а макет содержит повторное представление

public class StudentFragment extends Fragment {
private StudentInfoFireAdapter adapter;

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_recyclerview, container, false);
    RecyclerView recyclerView = root.findViewById(R.id.rv_fragment);
    CollectionReference collection = FirebaseFirestore.getInstance().collection("student");
    Query query = collection.orderBy("dob", Query.Direction.ASCENDING);
    FirestoreRecyclerOptions<StudentModel> options = new FirestoreRecyclerOptions.Builder<StudentModel>()
            .setQuery(query, StudentModel.class)
            .build();
    adapter = new StudentInfoFireAdapter(options, getContext());
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);
    FloatingActionButton fab = root.findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getActivity(), AddStudent.class);
            startActivity(intent);
        }
    });
    return root;
}

@Override
public void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    adapter.stopListening();
}

}

1 Ответ

0 голосов
/ 03 марта 2020

Это вы можете сделать с Glide:

Glide.with(context)
  .load(uri)
  .diskCacheStrategy(DiskCacheStrategy.ALL)
  .into(imageView);

Подробнее о Стратегии дискового кэша

...