视频列表的android客户端和springmvc服务端实现(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23195583/article/details/54343336

项目运行图太大了,我放在github上了
https://github.com/1181631922/Recreation/blob/master/readme/video/videos2.gif

服务器端代码基本就完成了,来看一下客户端的代码,先来看一下json接口

public final static String BASE_URL = "http://localhost:8080/recreation-1.0";

//获取视频接口
public final static String GET_VIDEO_LIST = BASE_URL + "/videos/findVideoByPage?page=";

这里服务器还没有做分页,现在数据相对来说还比较少,嘿嘿。
客户端的bean和服务器保持了一致,就是序列化了一下

package com.fanyafeng.recreation.bean;

import android.os.Parcel;
import android.os.Parcelable;

import org.json.JSONObject;

/**
 * Author: fanyafeng
 * Data: 17/1/5 上午10:37
 * Email: [email protected]
 */
public class VideoBean implements Parcelable {
    private int id;
    private String img;
    private String videoUrl;
    private String title;
    private String des;
    private String headerImg;

    public VideoBean(JSONObject jsonObject) {
        setId(jsonObject.optInt("id"));
        setImg(jsonObject.optString("img"));
        setVideoUrl(jsonObject.optString("video_url"));
        setTitle(jsonObject.optString("title"));
        setDes(jsonObject.optString("des"));
        setHeaderImg(jsonObject.optString("header_img"));
    }

    protected VideoBean(Parcel in) {
        id = in.readInt();
        img = in.readString();
        videoUrl = in.readString();
        title = in.readString();
        des = in.readString();
        headerImg = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(img);
        dest.writeString(videoUrl);
        dest.writeString(title);
        dest.writeString(des);
        dest.writeString(headerImg);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<VideoBean> CREATOR = new Creator<VideoBean>() {
        @Override
        public VideoBean createFromParcel(Parcel in) {
            return new VideoBean(in);
        }

        @Override
        public VideoBean[] newArray(int size) {
            return new VideoBean[size];
        }
    };

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getVideoUrl() {
        return videoUrl;
    }

    public void setVideoUrl(String videoUrl) {
        this.videoUrl = videoUrl;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    public String getHeaderImg() {
        return headerImg;
    }

    public void setHeaderImg(String headerImg) {
        this.headerImg = headerImg;
    }

    @Override
    public String toString() {
        return "VideoBean{" +
                "id=" + id +
                ", img='" + img + '\'' +
                ", videoUrl='" + videoUrl + '\'' +
                ", title='" + title + '\'' +
                ", des='" + des + '\'' +
                ", headerImg='" + headerImg + '\'' +
                '}';
    }
}

再来看一下fragment的代码,这里用的是recyclerview,但是没有启用加载和刷新。

package com.fanyafeng.recreation.fragment;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.fanyafeng.recreation.R;
import com.fanyafeng.recreation.adapter.VideoAdapter;
import com.fanyafeng.recreation.bean.VideoBean;
import com.fanyafeng.recreation.network.NetUtil;
import com.fanyafeng.recreation.network.Urls;
import com.fanyafeng.recreation.refreshview.XRefreshView;
import com.fanyafeng.recreation.util.StringUtil;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

import static com.fanyafeng.recreation.network.NetUtil.JSON;

public class ThreeFragment extends Fragment {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private String mParam1;
    private String mParam2;

    private Toolbar toolbar_three;
    private XRefreshView refreshVideo;
    private RecyclerView rvVideo;

    private List<VideoBean> videoBeanList = new ArrayList<>();
    private VideoAdapter videoAdapter;

    public ThreeFragment() {
    }

    public static ThreeFragment newInstance(String param1, String param2) {
        ThreeFragment fragment = new ThreeFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_three, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView();
//        initData();
//        Thread thread = new Thread(new LoadThread());
//        thread.start();

        new RecommandWineTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }

    private void initView() {
        toolbar_three = (Toolbar) getActivity().findViewById(R.id.toolbar_three);
        toolbar_three.setLogo(R.drawable.simle_logo_03);
        toolbar_three.setTitle("音乐视频");

        refreshVideo = (XRefreshView) getActivity().findViewById(R.id.refreshVideo);
        refreshVideo.setPullLoadEnable(true);
        refreshVideo.setAutoLoadMore(true);

        refreshVideo.setPullRefreshEnable(false);

        rvVideo = (RecyclerView) getActivity().findViewById(R.id.rvVideo);
        rvVideo.setLayoutManager(new GridLayoutManager(getActivity(), 1, GridLayoutManager.VERTICAL, false));
        videoAdapter = new VideoAdapter(getActivity(), videoBeanList);
        rvVideo.setAdapter(videoAdapter);
    }

    private void initData() {

    }

    class RecommandWineTask extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (!StringUtil.isNullOrEmpty(s)) {
                Log.d("video", s);
                try {
                    JSONObject jsonObject = new JSONObject(s);
                    if (jsonObject != null) {
                        String state = jsonObject.optString("state");
                        if (state.equals(NetUtil.STATE_OK)) {
                            JSONArray jsonArray = jsonObject.optJSONArray("videoList");
                            int videoSize = jsonArray.length();
                            for (int i = 0; i < videoSize; i++) {
                                VideoBean videoBean = new VideoBean(jsonArray.optJSONObject(i));
                                videoBeanList.add(videoBean);
                                videoAdapter.notifyDataSetChanged();
                            }
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        protected String doInBackground(String... param) {
            return NetUtil.httpGetUtil(getActivity(), Urls.GET_VIDEO_LIST + 0);
        }
    }

    private void postJson() {
        //申明给服务端传递一个json串
        //创建一个OkHttpClient对象
        OkHttpClient okHttpClient = new OkHttpClient();
        //创建一个RequestBody(参数1:数据类型 参数2传递的json串)
        JSONObject jsonObject = new JSONObject();
        JSONObject common = null;
        JSONObject params = null;
        try {
            common = new JSONObject();
            common.put("identifier", "mo098fd4ac5ed161ad921d6048636625");
            common.put("app_version", "1006010802");
            common.put("os_version", "23");
            common.put("device", "Google Nexus 6P - 6.0.0 - API 23 - 1440x2560");
            common.put("platform", "Android");
            common.put("pid", "5080");
            common.put("language", "CN");
            common.put("uid", "366617270");
            common.put("width", "1440");
            common.put("height", "2392");

            params = new JSONObject();
            params.put("category_id", "113");
            params.put("city_id", "33");
            params.put("page_past", "0");
            params.put("page_length", "10");
            params.put("is_webp", "1");

            jsonObject.put("common", common);
            jsonObject.put("params", params);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
        //创建一个请求对象
        Request request = new Request.Builder()
                .url("http://fds.api.moji.com/card/recommendV2")
                .post(requestBody)
                .build();
        //发送请求获取响应
        try {
            Response response = okHttpClient.newCall(request).execute();
            //判断请求是否成功
            if (response.isSuccessful()) {
                //打印服务端返回结果
                Log.i("three", response.body().string());

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


}

最后看一下适配器,点击进行相应的视频播放。

package com.fanyafeng.recreation.adapter;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.facebook.drawee.view.SimpleDraweeView;
import com.fanyafeng.recreation.R;
import com.fanyafeng.recreation.activity.PlayVideoActivity;
import com.fanyafeng.recreation.bean.VideoBean;
import com.fanyafeng.recreation.bean.YinYueBean;
import com.fanyafeng.recreation.refreshview.recyclerview.BaseRecyclerAdapter;
import com.fanyafeng.recreation.util.FrescoAttributeUtil;
import com.fanyafeng.recreation.util.FrescoUtil;

import java.util.List;

/**
 * Author: fanyafeng
 * Data: 16/12/19 下午5:51
 * Email: [email protected]
 */
public class VideoAdapter extends BaseRecyclerAdapter<VideoAdapter.VideoViewHolder> {
    private Context context;
    private List<VideoBean> videoBeanList;

    public VideoAdapter(Context context, List<VideoBean> videoBeanList) {
        this.context = context;
        this.videoBeanList = videoBeanList;
    }

    @Override
    public VideoViewHolder getViewHolder(View view) {
        return new VideoViewHolder(view);
    }

    @Override
    public VideoViewHolder onCreateViewHolder(ViewGroup parent, int viewType, boolean isItem) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_yinyue_layout, parent, false);
        return getViewHolder(view);
    }

    @Override
    public void onBindViewHolder(VideoViewHolder holder, int position, boolean isItem) {
        final VideoBean videoBean = videoBeanList.get(position);
        FrescoUtil.loadPicOnNet(holder.sdvImg, videoBean.getImg());
        holder.tvTitle.setText(videoBean.getTitle());
        FrescoUtil.loadPicOnNet(holder.sdvIcon, videoBean.getHeaderImg());
        holder.sdvIcon.setHierarchy(FrescoAttributeUtil.setCircleRingHierarchy(context, Color.BLUE, 5f));
        holder.sdvIcon.bringToFront();
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, PlayVideoActivity.class);
                intent.putExtra("videoUrl", videoBean.getVideoUrl());
                context.startActivity(intent);
            }
        });

    }

    @Override
    public int getAdapterItemCount() {
        return videoBeanList.size();
    }

    class VideoViewHolder extends RecyclerView.ViewHolder {
        SimpleDraweeView sdvImg;
        TextView tvTitle;
        SimpleDraweeView sdvIcon;

        public VideoViewHolder(View itemView) {
            super(itemView);
            sdvImg = (SimpleDraweeView) itemView.findViewById(R.id.sdvImg);
            tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);
            sdvIcon = (SimpleDraweeView) itemView.findViewById(R.id.sdvIcon);
        }
    }
}

这里的图片处理就是用的我原来写的fresco的工具类:
https://github.com/1181631922/FrescoPicLoad

猜你喜欢

转载自blog.csdn.net/qq_23195583/article/details/54343336