MVP获取网络数据并展示

来源:互联网 发布:梦幻诛仙手游软件礼包 编辑:程序博客网 时间:2024/06/10 21:24


//MyXLVAdapter 适配器页面import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;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.bwie.hanshuaishuai1509a20171120.R;import com.bwie.hanshuaishuai1509a20171120.bean.OrderListBean;import com.bwie.hanshuaishuai1509a20171120.presenter.CancleOrderPresenter;import java.util.List;public class MyXLVAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private Context context;    private List<OrderListBean.DataBean> list;    private final CancleOrderPresenter cancleOrderPresenter;    public MyXLVAdapter(Context context, List<OrderListBean.DataBean> list) {        this.context = context;        this.list = list;        cancleOrderPresenter = new CancleOrderPresenter();    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(context).inflate(R.layout.item_recyclerview, parent, false);        return new MyViewHolder(view);    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        final OrderListBean.DataBean dataBean = list.get(position);        MyViewHolder myViewHolder = (MyViewHolder) holder;        myViewHolder.tv_title.setText(dataBean.getTitle());        int status = dataBean.getStatus();        if (status == 0) {            myViewHolder.tv_status.setText("待支付");            myViewHolder.tv.setText("取消订单");            myViewHolder.tv_status.setTextColor(Color.RED);        } else if (status == 1) {            myViewHolder.tv_status.setText("已支付");            myViewHolder.tv.setText("查看订单");            myViewHolder.tv_status.setTextColor(Color.BLACK);        } else {            myViewHolder.tv_status.setText("已取消");            myViewHolder.tv.setText("查看订单");            myViewHolder.tv_status.setTextColor(Color.BLACK);        }        myViewHolder.tv_price.setText("" + dataBean.getPrice());        myViewHolder.tv_time.setText("" + dataBean.getCreatetime());        myViewHolder.tv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new AlertDialog.Builder(context)                        .setTitle("提示")                        .setMessage("确定取消订单吗?")                        .setPositiveButton("", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                cancleOrderPresenter.cancleOrder(context,"1", dataBean.getOrderid() + "");                            }                        })                        .setNegativeButton("", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                            }                        })                        .show();            }        });    }    @Override    public int getItemCount() {        return list.size();    }    class MyViewHolder extends RecyclerView.ViewHolder {        private final TextView tv_title;        private final TextView tv_status;        private final TextView tv_price;        private final TextView tv_time;        private final TextView tv;        public MyViewHolder(View itemView) {            super(itemView);            tv_title = itemView.findViewById(R.id.tv_goods_title);            tv_status = itemView.findViewById(R.id.tv_goods_state);            tv_price = itemView.findViewById(R.id.tv_goods_price);            tv_time = itemView.findViewById(R.id.tv_goods_time);            tv = itemView.findViewById(R.id.tv_goods);        }    }}

//OrderListBean  Bean类import java.util.List;public class OrderListBean {    /**     * msg : 请求成功     * code : 0     * data : [{"createtime":"2017-10-19T20:28:43","orderid":20,"price":100,"status":2,"title":"订单标题测试3","uid":71},{"createtime":"2017-10-19T20:44:40","orderid":31,"price":11800,"status":2,"title":"订单标题测试14","uid":71},{"createtime":"2017-10-19T20:44:51","orderid":32,"price":11800,"status":1,"title":"订单标题测试15","uid":71},{"createtime":"2017-10-20T08:02:07","orderid":43,"price":11800,"status":2,"title":"订单标题测试","uid":71},{"createtime":"2017-10-20T08:02:16","orderid":44,"price":11800,"status":2,"title":"订单标题测试","uid":71},{"createtime":"2017-10-22T15:14:39","orderid":890,"price":11800,"status":2,"title":"","uid":71},{"createtime":"2017-11-09T09:17:20","orderid":1446,"price":99.99,"status":1,"title":"订单标题测试","uid":71},{"createtime":"2017-11-09T09:20:58","orderid":1447,"price":567,"status":2,"title":"订单标题测试","uid":71},{"createtime":"2017-11-09T09:20:58","orderid":1448,"price":256.99,"status":2,"title":"订单标题测试","uid":71},{"createtime":"2017-11-09T09:20:58","orderid":1449,"price":399,"status":2,"title":"订单标题测试","uid":71}]     * page : 0     */    private String msg;    private String code;    private String page;    private List<DataBean> data;    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public String getPage() {        return page;    }    public void setPage(String page) {        this.page = page;    }    public List<DataBean> getData() {        return data;    }    public void setData(List<DataBean> data) {        this.data = data;    }    public static class DataBean {        /**         * createtime : 2017-10-19T20:28:43         * orderid : 20         * price : 100.0         * status : 2         * title : 订单标题测试3         * uid : 71         */        private String createtime;        private int orderid;        private double price;        private int status;        private String title;        private int uid;        public String getCreatetime() {            return createtime;        }        public void setCreatetime(String createtime) {            this.createtime = createtime;        }        public int getOrderid() {            return orderid;        }        public void setOrderid(int orderid) {            this.orderid = orderid;        }        public double getPrice() {            return price;        }        public void setPrice(double price) {            this.price = price;        }        public int getStatus() {            return status;        }        public void setStatus(int status) {            this.status = status;        }        public String getTitle() {            return title;        }        public void setTitle(String title) {            this.title = title;        }        public int getUid() {            return uid;        }        public void setUid(int uid) {            this.uid = uid;        }    }}

//M层  CancleOrderModel  取消订单页面import android.content.Context;import com.bwie.hanshuaishuai1509a20171120.net.Api;import com.bwie.hanshuaishuai1509a20171120.net.HttpUtils;import com.bwie.hanshuaishuai1509a20171120.net.OnNetWorkListener;import java.io.IOException;import java.util.HashMap;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;public class CancleOrderModel {    public void cancleOrder(Context context,String status, String orderId, OnNetWorkListener onNetWorkListener) {        Map<String, String> params = new HashMap<>();        params.put("uid", "71");        params.put("orderId", orderId);        params.put("status", status);        HttpUtils.getHttpUtils(context).doPost(Api.ORDER_CANCEL_URL, params, new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {            }        });    }}

//M层 OrderModel 订单显示页面

import android.content.Context;import android.os.Handler;import android.os.Looper;import com.bwie.hanshuaishuai1509a20171120.bean.OrderListBean;import com.bwie.hanshuaishuai1509a20171120.net.Api;import com.bwie.hanshuaishuai1509a20171120.net.HttpUtils;import com.bwie.hanshuaishuai1509a20171120.net.OnNetWorkListener;import com.google.gson.Gson;import java.io.IOException;import java.util.HashMap;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;public class OrderModel implements IOrderModel {    private Handler handler = new Handler(Looper.getMainLooper());    //Post获取    @Override    public void doPostOrder(Context context, String status, String page, final OnNetWorkListener<OrderListBean> onNetWorkListener) {        Map<String, String> params = new HashMap<>();        params.put("uid", "71");        params.put("status", status);        params.put("page", page);        HttpUtils.getHttpUtils(context).doPost(Api.ORDER_LIST_URL, params, new Callback() {            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        onNetWorkListener.onFailure(e);                    }                });            }            @Override            public void onResponse(Call call, Response response) throws IOException {                String string = response.body().string();                final OrderListBean orderListBean = new Gson().fromJson(string, OrderListBean.class);                handler.post(new Runnable() {                    @Override                    public void run() {                        onNetWorkListener.onSuccess(orderListBean);                    }                });            }        });    }    //Get获取    @Override    public void dogetOrder(Context context, String status, String page, OnNetWorkListener<OrderListBean> onNetWorkListener) {    }}


//M层自定义接口 IOrderModelimport android.content.Context;import com.bwie.hanshuaishuai1509a20171120.bean.OrderListBean;import com.bwie.hanshuaishuai1509a20171120.net.OnNetWorkListener;public interface IOrderModel {    //Post获取商品列表    public void doPostOrder(Context context,String status, String page, OnNetWorkListener<OrderListBean> onNetWorkListener);    //Get获取商品列表    public void dogetOrder(Context context,String status, String page,OnNetWorkListener<OrderListBean> onNetWorkListener);}
//net 中封装的API
public class Api {    //订单列表    public static final String ORDER_LIST_URL = "https://www.zhaoapi.cn/product/getOrders";    //取消订单    public static final String ORDER_CANCEL_URL = "https://www.zhaoapi.cn/product/updateOrder";}


//net 中的 HttpUtils 方法

import android.content.Context;import android.widget.Toast;import com.bwie.hanshuaishuai1509a20171120.utils.NetworkUtils;import java.util.Map;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;public class HttpUtils {    private static Context context;    private OkHttpClient client;    private static HttpUtils httpUtils;    //拦截器    public HttpUtils(Context context) {        this.context = context;        //默认拦截器      /*  HttpLoggingInterceptor logging = new HttpLoggingInterceptor();        logging.setLevel(HttpLoggingInterceptor.Level.BODY);*/        client = new OkHttpClient.Builder()                //自定义拦截器                .addInterceptor(new MyInterceptor())                .build();    }    //单例模式    public static HttpUtils getHttpUtils(Context context){        if (httpUtils == null){            synchronized (HttpUtils.class){                if (httpUtils == null){                    httpUtils = new HttpUtils(context);                }            }        }        return httpUtils;    }    /**     * post请求     * @param url     * @param params     * @param callback     */    public void doPost(String url, Map<String,String> params, Callback callback){       if (!NetworkUtils.isAvailable(context)){           Toast.makeText(context,"网络连接超时!!",Toast.LENGTH_SHORT).show();           return;       }        //创建post一个请求        FormBody.Builder builder = new FormBody.Builder();        for (Map.Entry<String,String> enerty:params.entrySet()) {            builder.add(enerty.getKey(), enerty.getValue());        }        FormBody formBody = builder.build();        Request request = new Request.Builder().url(url).post(formBody).build();        client.newCall(request).enqueue(callback);    }    /**     * Get请求     * @param url     * @param callback     */    public void doGet(String url, Callback callback) {        //判断是否有网        if (!NetworkUtils.isAvailable(context)) {            Toast.makeText(context, "网络不可用", Toast.LENGTH_LONG).show();            return;        }        //创建一个Resquest        Request request = new Request.Builder().url(url).get().build();        client.newCall(request).enqueue(callback);    }}

//net中的自定义Post拦截器 MyInterceptor 
import java.io.IOException;import okhttp3.FormBody;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;public class MyInterceptor implements Interceptor {    //post拦截器    @Override    public Response intercept(Chain chain) throws IOException {        //获取原始的请求数据        Request orginRequest = chain.request();        //先获取原始的请求参数,然后再拼接起来        FormBody orginBody = (FormBody) orginRequest.body();        FormBody.Builder builder = new FormBody.Builder();        for (int i = 0; i < orginBody.size(); i++) {            String name = orginBody.name(i);            String value = orginBody.value(i);            builder.add(name, value);        }        builder.add("source", "android");        FormBody formBody = builder.build();        Request request = new Request.Builder().url(orginRequest.url()).post(formBody).build();        return chain.proceed(request);    }    }
//net中的回调  成功失败的回调接口
public interface OnNetWorkListener<T> {    //成功的回调    public void onSuccess(T t);    //失败的回调    public void onFailure(Exception e);}
//P层中的取消订单import android.content.Context;import com.bwie.hanshuaishuai1509a20171120.model.CancleOrderModel;import com.bwie.hanshuaishuai1509a20171120.net.OnNetWorkListener;public class CancleOrderPresenter {    private CancleOrderModel cancleOrderModel;    public CancleOrderPresenter() {        this.cancleOrderModel = new CancleOrderModel();    }    public void cancleOrder(Context context,String status, String orderId) {        cancleOrderModel.cancleOrder(context,status, orderId, new OnNetWorkListener() {            @Override            public void onSuccess(Object o) {            }            @Override            public void onFailure(Exception e) {            }        });    }}
//P层中的显示商品import android.content.Context;import com.bwie.hanshuaishuai1509a20171120.bean.OrderListBean;import com.bwie.hanshuaishuai1509a20171120.model.OrderModel;import com.bwie.hanshuaishuai1509a20171120.net.OnNetWorkListener;import com.bwie.hanshuaishuai1509a20171120.view.IMainActivity;public class CanclePresenter {    private OrderModel orderModel;    private IMainActivity iMainActivity;    private Context context;    public CanclePresenter(IMainActivity iMainActivity) {        orderModel = new OrderModel();        this.iMainActivity = iMainActivity;        context = (Context) iMainActivity;    }    public void getOrder(final boolean isRefresh, String status, String page) {        orderModel.doPostOrder(context,status, page, new OnNetWorkListener<OrderListBean>() {            @Override            public void onSuccess(OrderListBean orderListBean) {                iMainActivity.showData(isRefresh, orderListBean.getData());            }            @Override            public void onFailure(Exception e) {            }        });    }    public void dettach() {        if (iMainActivity != null) {            iMainActivity = null;        }    }}
/**
*判断网络的工具类
*/
//View层中的接口import com.bwie.hanshuaishuai1509a20171120.bean.OrderListBean;import java.util.List;public interface IMainActivity {    public void showData(boolean isRefresh, List<OrderListBean.DataBean> list);}

//View层中的MainActivityimport android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.TextView;import android.widget.Toast;import com.bwie.hanshuaishuai1509a20171120.R;import com.bwie.hanshuaishuai1509a20171120.adapter.MyXLVAdapter;import com.bwie.hanshuaishuai1509a20171120.bean.OrderListBean;import com.bwie.hanshuaishuai1509a20171120.presenter.CanclePresenter;import com.jcodecraeer.xrecyclerview.XRecyclerView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener, IMainActivity {    private ImageView mIvPopState;    private FrameLayout mFm;    private RecyclerView mRv;    private int page = 1;    private List<OrderListBean.DataBean> list = new ArrayList<>();    private MyXLVAdapter myXLVAdapter;    /**     * 待支付     */    private RadioButton mDai;    /**     * 已支付     */    private RadioButton mFu;    /**     * 已取消     */    private RadioButton mXiao;    private RadioGroup mRg;    private XRecyclerView mXrv;    private CanclePresenter canclePresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        mXrv.setLayoutManager(new LinearLayoutManager(this));        myXLVAdapter = new MyXLVAdapter(this, list);        mXrv.setAdapter(myXLVAdapter);        //想去获取数据,测试一下数据是否获取到        canclePresenter = new CanclePresenter(this);        canclePresenter.getOrder(true, "1", page + "");        mXrv.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                //刷新                page = 1;                canclePresenter.getOrder(true, "1", page + "");            }            @Override            public void onLoadMore() {                //加载更多                page++;                canclePresenter.getOrder(false, "1", page + "");            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        canclePresenter.dettach();    }    private void initView() {        mIvPopState = (ImageView) findViewById(R.id.iv_pop_state);        mIvPopState.setOnClickListener(this);        mDai = (RadioButton) findViewById(R.id.dai);        mDai.setOnClickListener(this);        mFu = (RadioButton) findViewById(R.id.fu);        mFu.setOnClickListener(this);        mXiao = (RadioButton) findViewById(R.id.xiao);        mXiao.setOnClickListener(this);        mRg = (RadioGroup) findViewById(R.id.rg);        mXrv = (XRecyclerView) findViewById(R.id.xrv);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.iv_pop_state:                //弹出popupwindow                View view = View.inflate(MainActivity.this, R.layout.pop_item, null);                TextView tv1 = view.findViewById(R.id.tv1);                TextView tv2 = view.findViewById(R.id.tv2);                TextView tv3 = view.findViewById(R.id.tv3);                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);                PopupWindow popupWindow = new PopupWindow(view, layoutParams.width, layoutParams.height);                popupWindow.showAsDropDown(mIvPopState, 0, 30);                tv1.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        Toast.makeText(MainActivity.this, "tv1", Toast.LENGTH_SHORT).show();                        canclePresenter.getOrder(true, "1", "1");                    }                });                tv2.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        Toast.makeText(MainActivity.this, "tv2", Toast.LENGTH_SHORT).show();                    }                });                tv3.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        Toast.makeText(MainActivity.this, "tv3", Toast.LENGTH_SHORT).show();                    }                });                break;            case R.id.dai:                break;            case R.id.fu:                break;            case R.id.xiao:                break;        }    }    @Override    public void showData(boolean isRefresh, List<OrderListBean.DataBean> newlist) {        if (isRefresh) {            //如果是刷新            list.clear();            list.addAll(newlist);            mXrv.refreshComplete();        } else {            //如果是加载更多            list.addAll(newlist);            mXrv.setNoMore(true);        }        myXLVAdapter.notifyDataSetChanged();    }}
//主页面布局 activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.bwie.hanshuaishuai1509a20171120.view.MainActivity">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="30dp"        android:layout_margin="10dp">        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:gravity="center"            android:text="订单列表"/>        <ImageView            android:id="@+id/iv_pop_state"            android:layout_width="30dp"            android:layout_height="30dp"            android:background="@drawable/lv_icon"/>    </LinearLayout>    <RadioGroup        android:id="@+id/rg"        android:layout_width="match_parent"        android:layout_height="50dp"        android:orientation="horizontal"        android:gravity="center_vertical">        <RadioButton            android:id="@+id/dai"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="待支付"            android:gravity="center"            android:button="@null"/>        <RadioButton            android:id="@+id/fu"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="已支付"            android:gravity="center"            android:button="@null"/>        <RadioButton            android:id="@+id/xiao"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="已取消"            android:gravity="center"            android:button="@null"/>    </RadioGroup>    <com.jcodecraeer.xrecyclerview.XRecyclerView        android:id="@+id/xrv"        android:layout_width="match_parent"        android:layout_height="match_parent">    </com.jcodecraeer.xrecyclerview.XRecyclerView></LinearLayout>
//XRecyclerView的item布局 item_recyclerview.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="120dp"    android:layout_margin="15dp"    android:background="#ff3360"    android:descendantFocusability="blocksDescendants">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1">        <TextView            android:id="@+id/tv_goods_title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:padding="10dp"            android:text="商品名称"/>        <TextView            android:id="@+id/tv_goods_state"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:padding="10dp"            android:gravity="end"            android:text="已取消"/>    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:padding="10dp"            android:text="价格:"/>        <TextView            android:id="@+id/tv_goods_price"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:padding="10dp"            android:textColor="#ff0000"            android:text="99.99"/>    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:padding="10dp"            android:text="商品时间:"/>        <TextView            android:id="@+id/tv_goods_time"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:padding="10dp"            android:text="2017-11-20 12:20"/>        <TextView            android:id="@+id/tv_goods"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:padding="10dp"            android:gravity="end"            android:text="详情介绍"/>    </LinearLayout></LinearLayout>
// pop_item.xml Popwindow的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="wrap_content"    android:background="#ffffff"    android:orientation="vertical">    <TextView        android:id="@+id/tv1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="10dp"        android:text="待支付"></TextView>    <TextView        android:id="@+id/tv2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="10dp"        android:text="已支付"></TextView>    <TextView        android:id="@+id/tv3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="10dp"        android:text="已取消"></TextView></LinearLayout>


原创粉丝点击