[英]How to avoid downloading data from online storage (Firebase) every time an item shows in a RecyclerView?
我在 Firebase 存儲中保存了一些視頻,它們的 URL 保存在實時數據庫中,全部來自 firebase。 所有視頻都顯示在 RecyclerView 內的 VideoView 中。
這是我用來從數據庫中檢索數據的代碼:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("videos");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
VideoModel model = dataSnapshot.getValue(VideoModel.class);
list.add(model);
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
這是我用來從 URL 下載視頻的代碼(此方法在我的適配器的onBindViewHolder
):
private void setVideoUrl(VideoModel model,MyViewHolder holder){
String url = model.getUrl();
Uri uri = Uri.parse(url);
holder.videoView.setVideoURI(uri);
MediaController mediaController = new MediaController(context);
holder.videoView.setMediaController(mediaController);
mediaController.setAnchorView(holder.videoView);
holder.videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
holder.videoView.seekTo(1);
}
});
}
這工作正常,但問題是如果我向下滾動 recyclerView,然后備份,以前下載的所有視頻將再次下載。 有沒有辦法防止這種重復下載的發生?
您可以在設置回收站視圖之前將視頻下載到設備上的臨時文件夾,並將所有臨時文件 uri 存儲在一個數組列表中,其順序與傳遞給您的回收站視圖適配器的其他數據相同,並將數組列表傳遞給您的適配器其他數據。 然后在 onBindViewHolder 中,您可以檢索已經下載的文件並播放它們。 這樣,下載視頻與綁定到回收站視圖的視圖沒有任何關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.