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

来源:互联网 发布:c 凯撒密码编程 编辑:程序博客网 时间:2024/05/29 07:54

项目运行图太大了,我放在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: fanyafeng@live.cn */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: fanyafeng@live.cn */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

0 0