Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在RecyclerView中使用JSON对YouTube数据进行排序_Android_Android Recyclerview_Youtube Data Api - Fatal编程技术网

Android 在RecyclerView中使用JSON对YouTube数据进行排序

Android 在RecyclerView中使用JSON对YouTube数据进行排序,android,android-recyclerview,youtube-data-api,Android,Android Recyclerview,Youtube Data Api,我正在使用YouTube数据API,并在RecyclerView中使用JSON改进获取数据。该数据由一个频道的视频列表组成,该频道还包括实况视频 频道的URL为: https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCJekW1Vj5fCVEGdye_mBN6Q&maxResults=50&order=date&key=[您的API密钥] 我正在尝试在RecyclerView中对数据进行排序,以便实时视频位于列

我正在使用YouTube数据API,并在RecyclerView中使用JSON改进获取数据。该数据由一个频道的视频列表组成,该频道还包括实况视频

频道的URL为:

https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCJekW1Vj5fCVEGdye_mBN6Q&maxResults=50&order=date&key=[您的API密钥]

我正在尝试在RecyclerView中对数据进行排序,以便实时视频位于列表的顶部,其余视频按照日期进行排序。RecyclerView的适配器如下所示:

public class AdapterHome extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context context;
    private List<VideoYT> videoList;

    public
    AdapterHome(Context context, List<VideoYT> videoList) {
        this.context = context;
        this.videoList = videoList;
    }

    class YoutubeHolder extends RecyclerView.ViewHolder {

        ImageView thumbnail;
        TextView judul, tanggal;

        public YoutubeHolder(@NonNull View itemView) {
            super(itemView);
            thumbnail = itemView.findViewById(R.id.iv_thumbnail);
            judul = itemView.findViewById(R.id.tv_judul);
            tanggal = itemView.findViewById(R.id.tv_tglUpdate);
        }

        public void setData(final VideoYT data) {
            final String getJudul = data.getSnippet().getTitle();
            String getTgl = data.getSnippet().getPublishedAt();
            String getThumb = data.getSnippet().getThumbnails().getMedium().getUrl();

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(context, YTPlayerActivity.class);
                    i.putExtra("video_id", data.getId().getVideoId());
                    i.putExtra("video_title", getJudul);
                    context.startActivity(i);
                }
            });

            judul.setText(getJudul);
            tanggal.setText(getTgl);
            Picasso.get()
                    .load(getThumb)
                   // .placeholder(R.mipmap.ic_gujrati)
                    .fit()
                    .centerCrop()
                    .into(thumbnail, new Callback() {
                        @Override
                        public void onSuccess() {
                            Log.d(TAG, "Thumbnail berhasil ditampilkan");
                        }

                        @Override
                        public void onError(Exception e) {
                            Log.e(TAG, "Thumbnail error: ", e);
                        }
                    });
        }
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.row_item_home, parent, false);
        return new YoutubeHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        VideoYT videoYT = videoList.get(position);
        YoutubeHolder yth = (YoutubeHolder) holder;
        yth.setData(videoYT);
    }

    @Override
    public int getItemCount() {
        return videoList.size();
    }
}
    {
      "kind": "youtube#searchResult",
      "etag": "BARItyEvlwxiMQCYVni5-wa94N0",
      "id": {
        "kind": "youtube#video",
        "videoId": "C51KWXknpd8"
      },
      "snippet": {
        "publishedAt": "2020-10-23T11:33:46Z",
        "channelId": "UCJekW1Vj5fCVEGdye_mBN6Q",
        "title": "SAMAA News Live | Samaa TV Live | 24/7 Pakistan News Live Headlines, Bulletins &amp; Press Conferences",
        "description": "samaalive #pakistannewslive #livenews LIVE STREAM SAMAA TV 24/7 | live streaming on YouTube | Headlines , Bulletins, Special & Exclusive Coverage Stay ...",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/C51KWXknpd8/default_live.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/C51KWXknpd8/mqdefault_live.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/C51KWXknpd8/hqdefault_live.jpg",
            "width": 480,
            "height": 360
          }
        },
        "channelTitle": "SAMAA TV",
        **"liveBroadcastContent": "live",**
        "publishTime": "2020-10-23T11:33:46Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "3qQo96hAKuvzR1yqmOX2RRwm0fg",
      "id": {
        "kind": "youtube#video",
        "videoId": "JSUmX2wgwwk"
      },
      "snippet": {
        "publishedAt": "2020-10-23T11:20:53Z",
        "channelId": "UCJekW1Vj5fCVEGdye_mBN6Q",
        "title": "Samaa Headlines 4pm | Muhammad Zubair Jhoot bolne ke mahir hain - Shibili Faraz",
        "description": "samaanewslive #breakingnews #pakistannewslive Stay up-to-date on the major news making headlines across Pakistan on SAMAA TV's top of the hour ...",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/JSUmX2wgwwk/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/JSUmX2wgwwk/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/JSUmX2wgwwk/hqdefault.jpg",
            "width": 480,
            "height": 360
          }
        },
        "channelTitle": "SAMAA TV",
        "liveBroadcastContent": "none",
        "publishTime": "2020-10-23T11:20:53Z"
      }
    },

您的问题归结为对
VideoYT
类(例如,在类
AdapterHome
本身中定义)有一个自定义比较器:

根据程序的更广泛上下文(上面的示例代码没有显示),您可能还需要(想要?)在该构造函数中不修改
videoList
。然后,不要对
视频列表本身进行排序,而是制作一份副本并对该副本进行排序:

public
AdapterHome(Context context, List<VideoYT> videoList) {
    this.context = context;
    this.videoList = new ArrayList<>(videoList);
    Collections.sort(this.videoList, myComparator);
}
公共
AdapterHome(上下文,列表视频列表){
this.context=上下文;
this.videoList=新的数组列表(videoList);
Collections.sort(this.videoList,myComparator);
}

您能解释一下在适配器中的最后一部分(collection.sort)添加到哪里吗?已经说过:在类的构造函数中
AdapterHome
。请看我上面编辑的答案。谢谢。但现在它没有显示任何内容。空白屏幕没有您选择的两个选项中的任何一个?第二个。让我也试试第一个
public
AdapterHome(Context context, List<VideoYT> videoList) {
    this.context = context;
    Collections.sort(videoList, myComparator);         
    this.videoList = videoList;
}
public
AdapterHome(Context context, List<VideoYT> videoList) {
    this.context = context;
    this.videoList = new ArrayList<>(videoList);
    Collections.sort(this.videoList, myComparator);
}