【问题标题】:Retrofit response give wrong data改造响应给出错误的数据
【发布时间】:2016-08-15 18:28:17
【问题描述】:

我正在尝试从 vid.me API 获取视频 url、标题和数量。我有 GET 响应和结果,您可以从中看到 https://api.vid.me/videos/featured 我为 recyclerview 构建模型、API 和自定义适配器。在 RecyclerView 我想看视频,但不播放视频,只是快照或类似的东西。但是当我启动我的应用程序时,我在 VideoView 的地方看到黑色的数字。这个数字有区别大小,但它的黑色图形不像视频,标题和分数的字段是空的。 我必须做什么才能将视频视图更改为普通视频并将数据放入两个文本视图?

Video class(POJO):
public class Video {

    @SerializedName("clip_url")
    @Expose
    private String clip_url;
    @SerializedName("title")
    @Expose
    private String title;
    @SerializedName("description")
    @Expose
    private String description;
    @SerializedName("likes_count")
    @Expose
    private Integer likes_count;

    /**
     *
     * @return
     * The url
     */
    public String getClipUrl() {
        return clip_url;
    }

    /**
     *
     * @param clip_url
     * The url
     */
    public void setClip_url(String clip_url) {
        this.clip_url = clip_url;
    }

    /**
     *
     * @return
     * The title
     */
    public String getTitle() {
        return title;
    }

    /**
     *
     * @param title
     * The title
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     *
     * @return
     * The description
     */
    public String getDescription() {
        return description;
    }

    /**
     *
     * @param description
     * The description
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     *
     * @return
     * The score
     */
    public Integer getScore() {
        return likes_count;
    }

    /**
     *
     * @param likes_count
     * The score
     */
    public void setScore(Integer likes_count) {
        this.likes_count = likes_count;
    }

}

RecyclerViewAdapter:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.VideoViewHolder> {
    List<Video> call;
    RecyclerViewAdapter(List<Video> call){
        this.call = call;

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

    @Override
    public void onBindViewHolder(VideoViewHolder holder, int position) {
        String video_url = call.get(position).getClipUrl();
holder.videoView.setVideoURI(Uri.parse(video_url));

        holder.video_name.setText(call.get(position).getTitle());
      //  holder.video_like.setText(call.get(position).getScore());
    }

    @Override
    public int getItemCount() {
        return call.size();
    }

    public class VideoViewHolder extends RecyclerView.ViewHolder {
        CardView cardView;
        VideoView videoView;
        TextView video_name;
        TextView video_like;
        public VideoViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView.findViewById(R.id.card_view);
            videoView = (VideoView)itemView.findViewById(R.id.videoview);
            video_name = (TextView) itemView.findViewById(R.id.Videoname_textView);
            video_like = (TextView) itemView.findViewById(R.id.like_textview);
        }
    }
}

精选片段:

public class FeaturedFragment extends Fragment {
    RecyclerViewAdapter recyclerViewAdapter;
    public static final String ROOT_URL = "https://api.vid.me/";
    public List<Video> videos;
    RecyclerView recList;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_featured, container, false);
        recList = (RecyclerView) rootView.findViewById(R.id.cardList);
        recList.setHasFixedSize(true);
        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        llm.setOrientation(LinearLayoutManager.VERTICAL);
        recList.setLayoutManager(llm);
        try {
            getVideos();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return rootView;
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }

    private void getVideos() throws IOException {
        Retrofit retrofitAdapter = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(ROOT_URL)
                .build();
        final VideoApi videoApi = retrofitAdapter.create(VideoApi.class);
        Call<Videos> call = videoApi.getFeaturedVideo();
        call.enqueue(new Callback<Videos>() {
            @Override
            public void onResponse(Call<Videos> call, Response<Videos> response) {
                Log.d("MainActivity", "Status Code = " + response.code());
                videos = response.body().videos;
                recyclerViewAdapter = new RecyclerViewAdapter(videos);


                recList.setAdapter(recyclerViewAdapter);
            }

            @Override
            public void onFailure(Call<Videos> call, Throwable t) {

            }


        });
    }

}

【问题讨论】:

    标签: android retrofit android-recyclerview retrofit2


    【解决方案1】:

    请按照本教程学习如何从服务器检索数据。确保您了解所有代码。如果您还有其他问题,请到这里来。

    http://www.vogella.com/tutorials/Retrofit/article.html

    【讨论】:

    • 我需要从视频对象中获取一些数据。它的标题、likes_count 和完整的 url。我不明白如何从对象中获取这些数据。我需要更改我的 API 类和模型?如何?
    • @alexeypolusov 完成*
    • 和?你知道模型是如何创建的吗?创建一个 Parent 模型并将 Video 列表放入其中。
    猜你喜欢
    • 1970-01-01
    • 2018-09-10
    • 2020-09-12
    • 2021-04-26
    • 2016-04-29
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多