Bean自已换
导依赖
compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.0' compile 'com.android.support:recyclerview-v7:25.3.1'
加权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
main布局
<?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="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_order" android:layout_width="match_parent" android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView> </LinearLayout>设配器调用的
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/ll_orer_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:orientation="vertical"> <TextView android:id="@+id/txt_order_status" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_see_order" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查看订单" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toLeftOf="@id/ll_orer_status" android:orientation="vertical"> <TextView android:id="@+id/txt_order_title" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/txt_order_price" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/txt_order_time" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </RelativeLayout>
设置两个接口
package com.bwie.myorderdemo.callback; /** * Created by WuXirui * Create Time: 2017/11/21 * Description: */ public interface CallBack { void onSuccess(Object o); void onFailed(Exception e); }
package com.bwie.myorderdemo.callback; import com.bwie.myorderdemo.entity.Order; import java.util.List; /** * Created by WuXirui * Create Time: 2017/11/21 * Description: */ public interface IView { void success(List<Order> orders); void failed(Exception e); }
mainactivity里
package com.bwie.myorderdemo.view; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Toast; import com.bwie.myorderdemo.R; import com.bwie.myorderdemo.adapter.OrderAdapter; import com.bwie.myorderdemo.callback.IView; import com.bwie.myorderdemo.entity.Order; import com.bwie.myorderdemo.presenter.OrderPresenter; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements IView { private RecyclerView rvOrder; private OrderAdapter adapter; private List<Order> list; private OrderPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rvOrder = (RecyclerView) findViewById(R.id.rv_order); LinearLayoutManager manager = new LinearLayoutManager(this); rvOrder.setLayoutManager(manager); list = new ArrayList<>(); adapter = new OrderAdapter(this, list); rvOrder.setAdapter(adapter); presenter = new OrderPresenter(); presenter.attachView(this); presenter.getOrders("71"); } @Override public void success(List<Order> orders) { list.clear(); list.addAll(orders); adapter.notifyDataSetChanged(); } @Override public void failed(Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { super.onDestroy(); if (presenter != null) { presenter.detachView(); } } }
P层
package com.bwie.myorderdemo.presenter; import com.bwie.myorderdemo.callback.CallBack; import com.bwie.myorderdemo.callback.IView; import com.bwie.myorderdemo.entity.MessageBean; import com.bwie.myorderdemo.entity.Order; import com.bwie.myorderdemo.model.OkHttpUtils; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by WuXirui * Create Time: 2017/11/21 * Description: */ public class OrderPresenter { private IView iv; public void attachView(IView iv) { this.iv = iv; } public void getOrders(String id) { String url = "https://www.zhaoapi.cn/product/getOrders"; Map<String, Object> map = new HashMap<>(); map.put("uid", id); OkHttpUtils.getInstance().post(url, map, new CallBack() { @Override public void onSuccess(Object o) { MessageBean bean = (MessageBean) o; List<Order> data = bean.getData(); if (null != data) { iv.success(data); } } @Override public void onFailed(Exception e) { iv.failed(e); } }, MessageBean.class); } public void detachView() { if (null != iv) { iv = null; } } }
网络请求数据
package com.bwie.myorderdemo.model; import android.os.Handler; import com.bwie.myorderdemo.callback.CallBack; import java.io.IOException; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by WuXirui * Create Time: 2017/11/21 * Description: */ public class OkHttpUtils { private static volatile OkHttpUtils instance; private OkHttpClient client; private Handler handler = new Handler(); private OkHttpUtils() { client = new OkHttpClient.Builder() .addInterceptor(new MyInterceptor())//设置拦截器 .build(); } public static OkHttpUtils getInstance() { if (null == instance) { synchronized (OkHttpUtils.class) { if (instance == null) { instance = new OkHttpUtils(); } } } return instance; } //Post请求 public void post(String url, Map<String, Object> map, final CallBack callBack, final Class cls) { FormBody.Builder builder = new FormBody.Builder(); if (map != null && !map.isEmpty()) { for (Map.Entry<String, Object> entry : map.entrySet()) { builder.add(entry.getKey(), (String) entry.getValue()); } } Request request = new Request.Builder() .url(url) .post(builder.build()) .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { callBack.onFailed(e); } }); } @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); final Object o = GsonUtils.getInstance().fromJson(result, cls); handler.post(new Runnable() { @Override public void run() { callBack.onSuccess(o); } }); } }); } }
拦截器
package com.bwie.myorderdemo.model; import java.io.IOException; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; /** * Created by WuXirui * Create Time: 2017/11/21 * Description: */ public class MyInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Request newRequest = chain.request().newBuilder() .addHeader("source", "android") .url(request.url()) .build(); return chain.proceed(newRequest); } }
初始化Gson
package com.bwie.myorderdemo.model; import com.google.gson.Gson; /** * Created by WuXirui * Create Time: 2017/11/21 * Description: */ public class GsonUtils { private static Gson instance; private GsonUtils() { } public static Gson getInstance() { if (instance == null) { instance = new Gson(); } return instance; } }
Recyclerview拦截器
package com.bwie.myorderdemo.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import com.bwie.myorderdemo.R; import com.bwie.myorderdemo.entity.Order; import java.util.List; /** * Created by WuXirui * Create Time: 2017/11/21 * Description: */ public class OrderAdapter extends RecyclerView.Adapter<OrderAdapter.ViewHolder> { private Context context; private List<Order> list; public OrderAdapter(Context context, List<Order> list) { this.context = context; this.list = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = View.inflate(context, R.layout.item_order, null); ViewHolder holder = new ViewHolder(v); return holder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { int status = list.get(position).getStatus(); switch (status) { case 0: holder.txtStatus.setText("已取消"); break; case 1: holder.txtStatus.setText("待支付"); break; case 2: holder.txtStatus.setText("已支付"); break; } holder.txtTitle.setText(list.get(position).getTitle()); holder.txtPrice.setText(list.get(position).getPrice() + ""); holder.txtTime.setText(list.get(position).getCreatetime()); } @Override public int getItemCount() { if (list == null) { return 0; } return list.size(); } class ViewHolder extends RecyclerView.ViewHolder { private TextView txtStatus; private TextView txtTitle; private TextView txtPrice; private TextView txtTime; private Button btnSee; public ViewHolder(View itemView) { super(itemView); txtStatus = (TextView) itemView.findViewById(R.id.txt_order_status); txtTitle = (TextView) itemView.findViewById(R.id.txt_order_title); txtPrice = (TextView) itemView.findViewById(R.id.txt_order_price); txtTime = (TextView) itemView.findViewById(R.id.txt_order_time); btnSee = (Button) itemView.findViewById(R.id.btn_see_order); } } }