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>
阅读全文
0 0
- MVP获取网络数据并展示
- WEEK2--DrawerLayout 和 ListView 获取网络数据并展示
- WEEK2--DrawerLayout 和 ListView 获取网络数据并展示
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- MVP架构分包+OkHttp网络请求数据并展示到xrecyclerview上
- 网络访问数据并展示
- MVP+OKHttp获取网络数据
- recyclerview网络获取图片展示瀑布流MVP
- 获取网络图片缓存并展示
- MVP注册登录+OkHttp网络请求+展示数据
- android:MVP网络请求数据,运用RecyclerView-LinearLayout展示
- MVP架构分包+OkHttp网络请求+RecyclerView展示数据
- OkHttp请求网络数据,并listview展示
- MVC5获取JSONResult数据并展示
- Bootstrap Table获取并展示数据列表
- recyclerview展示数据(MVP)
- Cocos2d-x 获取网络图片缓存并展示
- 解析网络json数据并展示到ListView上
- IOS开发类之间的继承关系 两张树状图片
- 4.4分支管理策略
- mysql用update方法更改用户密码
- 算法:(贪心算法)-独木舟问题
- object tracking 论文阅读笔记(持续)
- MVP获取网络数据并展示
- 支付宝统一收单接口实现支付宝支付
- RESTFUL形式 BaseException
- okhttp post 重定向参数丢失 跨协议重定向
- AtCoder:Chef Hates Palindromes(思维 & 字符串)
- css/js的压缩与还原
- 函数式宏定义
- python 类的介绍,继承及重写父类方法
- java 传递参数的两种方式