簡體   English   中英

每次在 RecyclerView 中顯示項目時,如何避免從在線存儲 (Firebase) 下載數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM