MVP+OKHttp获取网络数据
来源:互联网 发布:sql server2012破解版 编辑:程序博客网 时间:2024/06/05 23:00
要导入的一些依赖
compile files('libs/universal-image-loader-1.9.3.jar')
compile files('libs/okio-1.13.0.jar')
compile files('libs/okhttp-3.9.0.jar')
compile files('libs/gson-2.2.4.jar')
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
注意要加网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:name=".app.MyApp"
MainActivity
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import com.example.mvpokhttp.Bean.ShowBean;
import com.example.mvpokhttp.Presenter.showpresenter;
import com.example.mvpokhttp.View.ShowView;
import com.example.mvpokhttp.adaptera.MyAdapter;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.List;
public class MainActivity extends AppCompatActivity implements ShowView {
private XRecyclerView mXrv;
showpresenter sp;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mXrv = (XRecyclerView) findViewById(R.id.xrv);
sp=new showpresenter(MainActivity.this,this);
sp.getData();
}
@Override
public void shows(List<ShowBean.DataBean.GoodsBriefBean> list) {
LinearLayoutManager ll=new LinearLayoutManager(this);
mXrv.setLayoutManager(ll);
adapter = new MyAdapter(MainActivity.this,list);
mXrv.setAdapter(adapter);
}
@Override
public void showAdapter(List<ShowBean.DataBean.GoodsBriefBean> list) {
adapter.setData(list);
}
}
Model层
import okhttp3.Callback;
public interface ShowModel {
public void getData(Callback callback);
}
Show类继承ShowModel
import com.example.mvpokhttp.Utils.OkHttp3Utils;
import okhttp3.Callback;
public class Show implements ShowModel {
@Override
public void getData(Callback callback) {
OkHttp3Utils.doGet("http://m.yunifang.com/yunifang/mobile/category/list?random=96333&encode=bf3386e14fe5bb0bcef234baebca2414",callback);
}
}
View层
import com.example.mvpokhttp.Bean.ShowBean;
import java.util.List;
public interface ShowView {
public void shows(List<ShowBean.DataBean.GoodsBriefBean> list);
public void showAdapter(List<ShowBean.DataBean.GoodsBriefBean> list);
}
presenter层
import android.content.Context;
import com.example.mvpokhttp.Bean.ShowBean;
import com.example.mvpokhttp.Model.Show;
import com.example.mvpokhttp.Model.ShowModel;
import com.example.mvpokhttp.Utils.OnUiCallback;
import com.example.mvpokhttp.View.ShowView;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import okhttp3.Call;
public class showpresenter {
Context context;
ShowView view;
ShowModel model;
List<ShowBean.DataBean.GoodsBriefBean> list;
public showpresenter(Context context, ShowView view) {
this.context = context;
this.view = view;
model=new Show();
view.shows(list);
}
public List<ShowBean.DataBean.GoodsBriefBean> getData(){
list=new ArrayList<ShowBean.DataBean.GoodsBriefBean>();
model.getData(new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) throws IOException {
Gson gson=new Gson();
ShowBean bean = gson.fromJson(result, ShowBean.class);
list.addAll(bean.getData().getGoodsBrief());
view.showAdapter(list);
}
});
return list;
}
}
OkHttp的封装1
import android.os.Handler;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
public class OkHttpUtils {
private Handler handler = new Handler();
public Handler getHandler(){
return handler;
}
//单例
private static OkHttpUtils okHttpUtils = new OkHttpUtils();
private OkHttpUtils(){};
public static OkHttpUtils getInstance(){
return okHttpUtils;
}
private OkHttpClient client;
//
private OkHttpClient getOkHttpClient() {
synchronized (OkHttpUtils.class) {
if (client == null) {
client = new OkHttpClient();
}
}
return client;
}
//公用的get请求方法 完成的功能不确定
public void doGet(String url, Callback callback){
OkHttpClient okHttpClient = getOkHttpClient();
Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
public void doPost(String url, Map<String,String> map, Callback callback){
OkHttpClient okHttpClient = getOkHttpClient();
FormBody.Builder builder = new FormBody.Builder();
//遍历map集合 设置请求体
for (String mapKey : map.keySet()){
builder.add(mapKey,map.get(mapKey));
}
//设置请求方式
Request request = new Request.Builder().url(url).post(builder.build()).build();
//执行请求方式 接口回调
okHttpClient.newCall(request).enqueue(callback);
}
/**
*1.下载地址
*/
public void doDown(String url,Callback callback){
OkHttpClient okHttpClient = getOkHttpClient();
Request build = new Request.Builder().url(url).build();
okHttpClient.newCall(build).enqueue(callback);
}
}
OnUiCallback OkHttp的封装2
import android.os.Handler;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public abstract class OnUiCallback implements Callback{
private Handler handler = OkHttpUtils.getInstance().getHandler();
public abstract void onFailed(Call call, IOException e);
public abstract void onSuccess(String result) throws IOException;
@Override
public void onFailure(final Call call, final IOException e) {
//该方式 存在问题 网络请求也跑到了主线程 待解决
//该方法就是把 线程post到handler所在的线程
handler.post(new Runnable() {
@Override
public void run() {
onFailed(call, e);
}
});
}
@Override
public void onResponse(final Call call, final Response response) throws IOException {
final String result = response.body().string();
//该方式 存在问题 网络请求也跑到了主线程 待解决
handler.post(new Runnable() {
@Override
public void run() {
try {
onSuccess(result);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
初始化ImageLoader
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration cofn = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(cofn);
}
}
MyAdapter适配器
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.mvpokhttp.Bean.ShowBean;
import com.example.mvpokhttp.R;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
public class MyAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> {
Context context;
List<ShowBean.DataBean.GoodsBriefBean> list;
public MyAdapter(Context context, List<ShowBean.DataBean.GoodsBriefBean> list) {
this.context = context;
this.list = list;
}
@Override
public XRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=View.inflate(context, R.layout.recycler_item,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(XRecyclerView.ViewHolder holder, int position) {
((MyViewHolder)holder).tv_name.setText(list.get(position).getEfficacy());
ImageLoader.getInstance().displayImage(list.get(position).getGoods_img(),((MyViewHolder) holder).iv);
}
@Override
public int getItemCount() {
return list!=null?list.size():0;
}
public void setData(List<ShowBean.DataBean.GoodsBriefBean> list) {
this.list = list;
notifyDataSetChanged();
}
public class MyViewHolder extends XRecyclerView.ViewHolder{
TextView tv_name;
ImageView iv;
public MyViewHolder(View itemView) {
super(itemView);
tv_name=itemView.findViewById(R.id.tv_name);
iv=itemView.findViewById(R.id.item_iv);
}
}
}
布局
activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.mvpokhttp.MainActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/xrv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
</RelativeLayout>
item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/tv_name"
android:textSize="10sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/item_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
解析的网络数据Bean
import java.util.List;
public class ShowBean {
/**
* code : 200
* msg : success
* data : {"category":[{"id":"16","cat_name":"按功效","is_leaf":"0","children":[{"id":"17","cat_name":"补水保湿","is_leaf":"1"},{"id":"31","cat_name":"舒缓修护","is_leaf":"1"},{"id":"19","cat_name":"控油去痘","is_leaf":"1"},{"id":"18","cat_name":"美白提亮","is_leaf":"1"},{"id":"20","cat_name":"紧致抗皱","is_leaf":"1"}]},{"id":"6","cat_name":"按属性","is_leaf":"0","children":[{"id":"38","cat_name":"面膜","is_leaf":"0"},{"id":"39","cat_name":"润肤水","is_leaf":"1"},{"id":"40","cat_name":"润肤乳","is_leaf":"1"},{"id":"24","cat_name":"洁面乳","is_leaf":"0"},{"id":"35","cat_name":"其他","is_leaf":"0"},{"id":"33","cat_name":"实惠套装","is_leaf":"1"},{"id":"9","cat_name":"贴式面膜","is_leaf":"0"},{"id":"10","cat_name":"睡眠面膜","is_leaf":"0"},{"id":"23","cat_name":"泥浆面膜","is_leaf":"0"},{"id":"41","cat_name":"男士","is_leaf":"0"}]},{"id":"11","cat_name":"按肤质","is_leaf":"0","children":[{"id":"14","cat_name":"混合性肤质","is_leaf":"1"},{"id":"13","cat_name":"中性肤质","is_leaf":"1"},{"id":"29","cat_name":"干性肤质","is_leaf":"1"},{"id":"28","cat_name":"油性肤质","is_leaf":"1"},{"id":"15","cat_name":"痘痘肤质","is_leaf":"1"},{"id":"37","cat_name":"敏感肤质","is_leaf":"0"}]}],"goodsBrief":[{"id":"121","goods_name":"镇店之宝丨美白嫩肤面膜7片","shop_price":49.9,"market_price":99,"goods_img":"https://image.yunifang.com/yunifang/images/goods/121/goods_img/17062610568378169043195978.jpg","reservable":false,"efficacy":"镇店之宝 美白爆款","stock_number":0,"restrict_purchase_num":0},{"id":"389","goods_name":"热销爆款丨清爽平衡矿物黑面膜21片","shop_price":99.9,"market_price":297,"goods_img":"https://image.yunifang.com/yunifang/images/goods/389/goods_img/17062610265116850439553337.jpg","reservable":false,"efficacy":"以黑吸黑 净透亮肤","stock_number":0,"restrict_purchase_num":0},{"id":"684","goods_name":"解救肌渴丨花粹水润面膜套装10片","shop_price":29.9,"market_price":139,"goods_img":"https://image.yunifang.com/yunifang/images/goods/684/goods_img/17062610401397749701177609.jpg","reservable":false,"efficacy":"水润充盈 鲜嫩少女肌","stock_number":0,"restrict_purchase_num":0},{"id":"6","goods_name":"好用不贵丨亮颜水润蚕丝面膜(寂地定制版)","shop_price":59.9,"market_price":239.9,"goods_img":"https://image.yunifang.com/yunifang/images/goods/6/goods_img/170626112597120167739086821.jpg","reservable":false,"efficacy":"深层补水 提亮肤色","stock_number":0,"restrict_purchase_num":0},{"id":"772","goods_name":"买就赠黑糖7片丨清润莹亮黑膜套装21片","shop_price":79.9,"market_price":297,"goods_img":"https://image.yunifang.com/yunifang/images/goods/772/goods_img/170929144736019579343521099.jpg","reservable":false,"efficacy":"自然莹亮 水感瓷肌","stock_number":0,"restrict_purchase_num":0},{"id":"5","goods_name":"金桂花矿物眼膜贴60片","shop_price":49.9,"market_price":89,"goods_img":"https://image.yunifang.com/yunifang/images/goods/5/goods_img/170626112553213363513709796.jpg","reservable":false,"efficacy":"补水靓眼 改善熊猫眼","stock_number":0,"restrict_purchase_num":0},{"id":"343","goods_name":"美白嫩肤润肤水150ml","shop_price":69,"market_price":119,"goods_img":"https://image.yunifang.com/yunifang/images/goods/343/goods_img/170626103423611420000294568.jpg","reservable":false,"efficacy":"补水保湿 美白嫩肤","stock_number":0,"restrict_purchase_num":0},{"id":"9","goods_name":"玫瑰滋养矿物睡眠面膜180g","shop_price":59.9,"market_price":99,"goods_img":"https://image.yunifang.com/yunifang/images/goods/9/goods_img/170626112611018894167156705.jpg","reservable":false,"efficacy":"镇店之宝 彻夜补水","stock_number":0,"restrict_purchase_num":0},{"id":"10","goods_name":"包邮丨美白嫩肤睡眠面膜180g","shop_price":49.9,"market_price":99,"goods_img":"https://image.yunifang.com/yunifang/images/goods/10/goods_img/170626112190919312919673075.jpg","reservable":false,"efficacy":"补水美白 越睡越白","stock_number":0,"restrict_purchase_num":0},{"id":"446","goods_name":"芦荟补水保湿凝胶150g","shop_price":49.9,"market_price":89,"goods_img":"https://image.yunifang.com/yunifang/images/goods/446/goods_img/170627143627211691152946151.jpg","reservable":false,"efficacy":"水水润润 修护受损","stock_number":0,"restrict_purchase_num":0},{"id":"16","goods_name":"热销套装丨玫瑰滋养保湿四件套","shop_price":139.9,"market_price":259.9,"goods_img":"https://image.yunifang.com/yunifang/images/goods/16/goods_img/17062611152592656236701367.jpg","reservable":false,"efficacy":"一整套源源补水","stock_number":0,"restrict_purchase_num":0},{"id":"8","goods_name":"买就送素颜霜丨美白嫩肤面膜20片","shop_price":119.9,"market_price":359,"goods_img":"https://image.yunifang.com/yunifang/images/goods/8/goods_img/170929144780917903477663517.jpg","reservable":false,"efficacy":"真美白 匠心造","stock_number":0,"restrict_purchase_num":0},{"id":"14","goods_name":"买就送洗脸扑丨矿物泥浆鼻膜60g","shop_price":55,"market_price":69,"goods_img":"https://image.yunifang.com/yunifang/images/goods/14/goods_img/170930094138819848945676015.jpg","reservable":false,"efficacy":"草莓鼻小救星 收敛毛孔","stock_number":0,"restrict_purchase_num":0},{"id":"189","goods_name":"控油必备丨清爽平衡护肤三件套","shop_price":99.9,"market_price":179.9,"goods_img":"https://image.yunifang.com/yunifang/images/goods/189/goods_img/1709300953684984597198733.jpg","reservable":false,"efficacy":"深层清洁 平衡水油","stock_number":0,"restrict_purchase_num":0},{"id":"428","goods_name":"多彩水润亮颜蚕丝面膜套装21片","shop_price":79.9,"market_price":270.9,"goods_img":"https://image.yunifang.com/yunifang/images/goods/428/goods_img/17062610201873359203247864.jpg","reservable":false,"efficacy":"吸黑焕彩 补水保湿","stock_number":0,"restrict_purchase_num":0}]}
*/
private int code;
private String msg;
private DataBean data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
private List<CategoryBean> category;
private List<GoodsBriefBean> goodsBrief;
public List<CategoryBean> getCategory() {
return category;
}
public void setCategory(List<CategoryBean> category) {
this.category = category;
}
public List<GoodsBriefBean> getGoodsBrief() {
return goodsBrief;
}
public void setGoodsBrief(List<GoodsBriefBean> goodsBrief) {
this.goodsBrief = goodsBrief;
}
public static class CategoryBean {
/**
* id : 16
* cat_name : 按功效
* is_leaf : 0
* children : [{"id":"17","cat_name":"补水保湿","is_leaf":"1"},{"id":"31","cat_name":"舒缓修护","is_leaf":"1"},{"id":"19","cat_name":"控油去痘","is_leaf":"1"},{"id":"18","cat_name":"美白提亮","is_leaf":"1"},{"id":"20","cat_name":"紧致抗皱","is_leaf":"1"}]
*/
private String id;
private String cat_name;
private String is_leaf;
private List<ChildrenBean> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCat_name() {
return cat_name;
}
public void setCat_name(String cat_name) {
this.cat_name = cat_name;
}
public String getIs_leaf() {
return is_leaf;
}
public void setIs_leaf(String is_leaf) {
this.is_leaf = is_leaf;
}
public List<ChildrenBean> getChildren() {
return children;
}
public void setChildren(List<ChildrenBean> children) {
this.children = children;
}
public static class ChildrenBean {
/**
* id : 17
* cat_name : 补水保湿
* is_leaf : 1
*/
private String id;
private String cat_name;
private String is_leaf;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCat_name() {
return cat_name;
}
public void setCat_name(String cat_name) {
this.cat_name = cat_name;
}
public String getIs_leaf() {
return is_leaf;
}
public void setIs_leaf(String is_leaf) {
this.is_leaf = is_leaf;
}
}
}
public static class GoodsBriefBean {
/**
* id : 121
* goods_name : 镇店之宝丨美白嫩肤面膜7片
* shop_price : 49.9
* market_price : 99.0
* goods_img : https://image.yunifang.com/yunifang/images/goods/121/goods_img/17062610568378169043195978.jpg
* reservable : false
* efficacy : 镇店之宝 美白爆款
* stock_number : 0
* restrict_purchase_num : 0
*/
private String id;
private String goods_name;
private double shop_price;
private double market_price;
private String goods_img;
private boolean reservable;
private String efficacy;
private int stock_number;
private int restrict_purchase_num;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getGoods_name() {
return goods_name;
}
public void setGoods_name(String goods_name) {
this.goods_name = goods_name;
}
public double getShop_price() {
return shop_price;
}
public void setShop_price(double shop_price) {
this.shop_price = shop_price;
}
public double getMarket_price() {
return market_price;
}
public void setMarket_price(double market_price) {
this.market_price = market_price;
}
public String getGoods_img() {
return goods_img;
}
public void setGoods_img(String goods_img) {
this.goods_img = goods_img;
}
public boolean isReservable() {
return reservable;
}
public void setReservable(boolean reservable) {
this.reservable = reservable;
}
public String getEfficacy() {
return efficacy;
}
public void setEfficacy(String efficacy) {
this.efficacy = efficacy;
}
public int getStock_number() {
return stock_number;
}
public void setStock_number(int stock_number) {
this.stock_number = stock_number;
}
public int getRestrict_purchase_num() {
return restrict_purchase_num;
}
public void setRestrict_purchase_num(int restrict_purchase_num) {
this.restrict_purchase_num = restrict_purchase_num;
}
}
}
}
最终效果
- MVP+OKHttp获取网络数据
- OkHttp获取网络数据
- OkHttp获取网络数据
- MVP-简单的OkHttp网络请求数据
- OkHttp+MVP请求数据
- MVP注册登录+OkHttp网络请求+展示数据
- MVP架构分包+OkHttp网络请求+RecyclerView展示数据
- Retrofit+okhttp拦截器获取网络数据
- MVP+okhttp请求网络接口
- MVP获取网络数据并展示
- MVP模式的OKhttp请求网络数据,xrecyclerview上拉刷新,下拉加载
- MVP+OKhttp+拦截器+RecyclerView+自定义view 实现请求网络数据的二级列表购物车
- MVP架构分包+OkHttp网络请求数据并展示到xrecyclerview上
- 网络请求框架 Rxjava+ReTrofit+okHttp+MVP
- okHttp网络请求2——MVP
- HttpURLConnection和okHttp两种获取网络数据实现
- okhttp获取网络数据之轮播图效果实现
- OKHttp请求网络数据
- 1073. 多选题常见计分法(20)
- 一个JAVA程序员成长之路分享
- 简单高精度加法
- conda 镜像管理
- 20171025之前的记录
- MVP+OKHttp获取网络数据
- 学习总结-javascript数据类型详解
- 前端性能优化
- 使用murano的PL语言
- Pycharm can't use Subversion command line client问题解决
- 5.12选择控制结构,习题5
- 机器学习基础01-数学分析与概率论
- 继承和多态
- JDBC封装工具类