//MainActivity
public class MainActivity extends AppCompatActivity implements CartPreCallBack,CartAdapterCallBack { private ExpandableListView cart_list; private TextView total_price_text; private CheckBox all_check; private Button clearing; private CartPre cartPre; private List<CartBean.DataBean> dataBeans = new ArrayList<>(); private CartListAdapter adapter; private double totalPrice; private int quantity; private List<CartBean.DataBean.ListBean> toDelete = new ArrayList<>(); private int responseCount; private boolean flag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //查找控件 cartPre = new CartPre(this); cart_list = (ExpandableListView) findViewById(R.id.cart_list); total_price_text = (TextView) findViewById(R.id.total_price); all_check = (CheckBox) findViewById(R.id.all_check); all_check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { toDelete.clear(); for (int i=0; i<dataBeans.size(); i++) { toDelete.addAll(dataBeans.get(i).getList()); } responseCount = 0; flag = all_check.isChecked(); updateChildChecked(); } }); clearing = (Button) findViewById(R.id.clearing); clearing.setOnClickListener(new View.OnClickListener() { private AlertDialog alertDialog; @Override public void onClick(View view){ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("确认订单"); DecimalFormat decimalFormat = new DecimalFormat("#.00"); String priceString = decimalFormat.format(totalPrice); builder.setMessage("订单金额:¥" + priceString); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { alertDialog.dismiss(); Map<String, String> params = new HashMap<>(); params.put("uid", Api.UID); params.put("price", String.valueOf(totalPrice)); params.put("token", Api.TOKEN); OkHttp3Util.doPost(Api.CREATE_ORDER, params, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ try { JSONObject jsonObject = new JSONObject(response.body().string()); if("订单创建成功".equals(jsonObject.getString("msg"))){ runOnUiThread(new Runnable() { @Override public void run() { Intent intent = new Intent(MainActivity.this, OrderListActivity.class); startActivity(intent); } }); } } catch (JSONException e) { e.printStackTrace(); } } } }); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { alertDialog.dismiss(); } }); alertDialog = builder.create(); alertDialog.show(); } }); getCartData(); } private void getCartData(){ Map<String, String> params = new HashMap<>(); params.put("uid", Api.UID); params.put("token", Api.TOKEN); cartPre.postData(Api.GET_CARTS, params); } @Override public void onCartPreResponseSuccess(CartBean cartBean) { dataBeans.clear(); dataBeans.addAll(cartBean.getData()); runOnUiThread(new Runnable() { @Override public void run() { setAdapter(); } }); } private void setAdapter() { for (int i=0; i<dataBeans.size(); i++) { if(childsForGroupIsAllChecked(dataBeans.get(i).getList())){ dataBeans.get(i).setSelected(1); }else{ dataBeans.get(i).setSelected(0); } } if(childsIsAllChecked()){ all_check.setChecked(true); }else{ all_check.setChecked(false); } calculateTotalPriceAndQuantity(); if(adapter == null){ adapter = new CartListAdapter(MainActivity.this, dataBeans); adapter.setCartAdapterCallBack(this); cart_list.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } //默认打开所有组 for (int i=0; i<dataBeans.size(); i++) { cart_list.expandGroup(i); } } private boolean childsForGroupIsAllChecked(List<CartBean.DataBean.ListBean> list){ for (int i=0; i<list.size(); i++) { if(list.get(i).getSelected() == 0){ return false; } } return true; } private boolean childsIsAllChecked(){ for (int i=0; i<dataBeans.size(); i++) { for (int j=0; j<dataBeans.get(i).getList().size(); j++) { if(dataBeans.get(i).getList().get(j).getSelected() == 0){ return false; } } } return true; } private void calculateTotalPriceAndQuantity(){ totalPrice = 0; quantity = 0; for (int i=0; i<dataBeans.size(); i++) { for (int j=0; j<dataBeans.get(i).getList().size(); j++) { if(dataBeans.get(i).getList().get(j).getSelected() == 1){ totalPrice += dataBeans.get(i).getList().get(j).getBargainPrice() * dataBeans.get(i).getList().get(j).getNum(); quantity += dataBeans.get(i).getList().get(j).getNum(); } } } DecimalFormat decimalFormat = new DecimalFormat("#.00"); String priceString = decimalFormat.format(totalPrice); total_price_text.setText(String.valueOf(priceString)); clearing.setText("去结算(" + quantity + ")"); } @Override public void onCartPreResponseError() { } @Override public void onGroupCheckBoxChanged(int group, boolean isChecked) { toDelete.clear(); toDelete.addAll(dataBeans.get(group).getList()); responseCount = 0; flag = isChecked; updateChildChecked(); } private void updateChildChecked(){ CartBean.DataBean.ListBean listBean = toDelete.get(responseCount); Map<String, String> params = new HashMap<>(); params.put("uid", Api.UID); params.put("sellerid", String.valueOf(listBean.getSellerid())); params.put("pid", String.valueOf(listBean.getPid())); params.put("selected", String.valueOf(flag?1:0)); params.put("num", String.valueOf(listBean.getNum())); params.put("token", Api.TOKEN); OkHttp3Util.doPost(Api.UPDATE_CARTS, params, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ if(responseCount < toDelete.size()-1){ responseCount++; updateChildChecked(); }else{ getCartData(); } } } }); } @Override public void onChildCheckBoxChanged(int group, int child, boolean isChecked) { //uid sellerid pid selected num token CartBean.DataBean.ListBean listBean = dataBeans.get(group).getList().get(child); Map<String, String> params = new HashMap<>(); params.put("uid", Api.UID); params.put("sellerid", String.valueOf(listBean.getSellerid())); params.put("pid", String.valueOf(listBean.getPid())); params.put("selected", String.valueOf(isChecked?1:0)); params.put("num", String.valueOf(listBean.getNum())); params.put("token", Api.TOKEN); OkHttp3Util.doPost(Api.UPDATE_CARTS, params, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ getCartData(); } } }); } @Override public void onNumberChanged(int group, int child, int value) { CartBean.DataBean.ListBean listBean = dataBeans.get(group).getList().get(child); Map<String, String> params = new HashMap<>(); params.put("uid", Api.UID); params.put("sellerid", String.valueOf(listBean.getSellerid())); params.put("pid", String.valueOf(listBean.getPid())); params.put("selected", String.valueOf(listBean.getSelected())); params.put("num", String.valueOf(value)); params.put("token", Api.TOKEN); OkHttp3Util.doPost(Api.UPDATE_CARTS, params, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ getCartData(); } } }); } }
//OrderListActivity
public class OrderListActivity extends AppCompatActivity implements OrderPreCallBack, OrderAdapterCallBack, View.OnClickListener { private ImageView status; private TextView unpaid; private TextView paid; private TextView canceled; private RecyclerView recy; private OrderPre orderPre; private List<OrderBean.DataBean> dataBeans = new ArrayList<>(); private OrderRecyAdapter adapter; private String pageCategory = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_order_list); orderPre = new OrderPre(this); status = (ImageView) findViewById(R.id.status); status.setOnClickListener(new View.OnClickListener() { private PopupWindow popupWindow; @Override public void onClick(View view) { View view1 = View.inflate(OrderListActivity.this, R.layout.layout_pop, null); view1.findViewById(R.id.unpaid).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { popupWindow.dismiss(); pageCategory = "unpaid"; getOrderData(); } }); view1.findViewById(R.id.paid).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { popupWindow.dismiss(); pageCategory = "paid"; getOrderData(); } }); view1.findViewById(R.id.canceled).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { popupWindow.dismiss(); pageCategory = "canceled"; getOrderData(); } }); popupWindow = new PopupWindow(view1, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setOutsideTouchable(true); popupWindow.setFocusable(true); popupWindow.showAsDropDown(status); } }); unpaid = (TextView) findViewById(R.id.unpaid); unpaid.setOnClickListener(this); paid = (TextView) findViewById(R.id.paid); paid.setOnClickListener(this); canceled = (TextView) findViewById(R.id.canceled); canceled.setOnClickListener(this); recy = (RecyclerView) findViewById(R.id.recy); getOrderData(); } private void getOrderData(){ Map<String, String> params = new HashMap<>(); params.put("uid", Api.UID); params.put("token", Api.TOKEN); orderPre.postData(Api.GET_ORDERS, params); } @Override public void onOrderPreResponseSuccess(OrderBean orderBean) { dataBeans.clear(); if(pageCategory == null){ dataBeans.addAll(orderBean.getData()); }else if("unpaid".equals(pageCategory)){ screeningDataByStatus(orderBean.getData(), 0); }else if("paid".equals(pageCategory)){ screeningDataByStatus(orderBean.getData(), 1); }else if("canceled".equals(pageCategory)){ screeningDataByStatus(orderBean.getData(), 2); } runOnUiThread(new Runnable() { @Override public void run() { setAdapter(); } }); } private void screeningDataByStatus(List<OrderBean.DataBean> data, int status){ for (int i=0; i<data.size(); i++) { if(data.get(i).getStatus() == status){ dataBeans.add(data.get(i)); } } } private void setAdapter() { recy.setLayoutManager(new LinearLayoutManager(OrderListActivity.this, LinearLayoutManager.VERTICAL, false)); if(adapter == null){ adapter = new OrderRecyAdapter(OrderListActivity.this, dataBeans); adapter.setOrderAdapterCallBack(this); recy.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } } @Override public void onOrderPreResponseError() { } @Override public void onCancelClick(final int position) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提示"); builder.setMessage("确定取消订单吗?"); builder.setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { OrderBean.DataBean dataBean = dataBeans.get(position); //uid status(0 待支付 1 已支付 2 已取消) orderId token Map<String, String> params = new HashMap<>(); params.put("uid", Api.UID); params.put("status", String.valueOf(2)); params.put("orderId", String.valueOf(dataBean.getOrderid())); params.put("token", Api.TOKEN); OkHttp3Util.doPost(Api.UPDATE_ORDER, params, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, final Response response) throws IOException { if(response.isSuccessful()){ try { JSONObject jsonObject = new JSONObject(response.body().string()); if("0".equals(jsonObject.getString("code"))){ getOrderData(); } } catch (JSONException e) { } } } }); } }).setNegativeButton("否", null); builder.show(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.unpaid: pageCategory = "unpaid"; getOrderData(); break; case R.id.paid: pageCategory = "paid"; getOrderData(); break; case R.id.canceled: pageCategory = "canceled"; getOrderData(); break; default: break; } } }
adapter文件夹下
//CartListAdapter
public class CartListAdapter extends BaseExpandableListAdapter{ private Context context; private List<CartBean.DataBean> dataBeans; private CartAdapterCallBack callBack; public CartListAdapter(Context context, List<CartBean.DataBean> dataBeans) { this.context = context; this.dataBeans = dataBeans; } @Override public int getGroupCount() { return dataBeans.size(); } @Override public int getChildrenCount(int i) { return dataBeans.get(i).getList().size(); } @Override public Object getGroup(int i) { return null; } @Override public Object getChild(int i, int i1) { return null; } @Override public long getGroupId(int i) { return 0; } @Override public long getChildId(int i, int i1) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { final GroupViewHolder holder; if(view == null){ view = View.inflate(context, R.layout.cart_group, null); holder = new GroupViewHolder(); holder.group_check = view.findViewById(R.id.group_check); holder.group_name = view.findViewById(R.id.group_name); view.setTag(holder); }else{ holder = (GroupViewHolder) view.getTag(); } holder.group_check.setChecked(dataBeans.get(i).getSelected() == 1?true:false); holder.group_check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { callBack.onGroupCheckBoxChanged(i, holder.group_check.isChecked()); } }); holder.group_name.setText(dataBeans.get(i).getSellerName()); return view; } @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { final ChildViewHolder holder; if(view == null){ view = View.inflate(context, R.layout.cart_child, null); holder = new ChildViewHolder(); holder.child_check = view.findViewById(R.id.child_check); holder.image = view.findViewById(R.id.image); holder.child_title = view.findViewById(R.id.child_title); holder.child_bargain_price = view.findViewById(R.id.bargain_price); holder.numberAddSubView = view.findViewById(R.id.number_view); view.setTag(holder); }else{ holder = (ChildViewHolder) view.getTag(); } CartBean.DataBean.ListBean listBean = dataBeans.get(i).getList().get(i1); holder.child_check.setChecked(listBean.getSelected() == 1?true:false); holder.child_check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { callBack.onChildCheckBoxChanged(i, i1, holder.child_check.isChecked()); } }); holder.image.setImageURI(listBean.getImages().split("\\|")[0]); holder.child_title.setText(listBean.getTitle()); holder.child_bargain_price.setText(String.valueOf(listBean.getBargainPrice())); holder.numberAddSubView.setValue(listBean.getNum()); holder.numberAddSubView.setOnButtonClickListenter(new NumberAddSubView.OnButtonClickListenter() { @Override public void onButtonAddClick(View view, int value) { callBack.onNumberChanged(i, i1, value); } @Override public void onButtonSubClick(View view, int value) { callBack.onNumberChanged(i, i1, value); } }); return view; } @Override public boolean isChildSelectable(int i, int i1) { return true; } class GroupViewHolder{ CheckBox group_check; TextView group_name; } class ChildViewHolder{ CheckBox child_check; SimpleDraweeView image; TextView child_title; TextView child_bargain_price; NumberAddSubView numberAddSubView; } public void setCartAdapterCallBack(CartAdapterCallBack callBack){ this.callBack = callBack; } }
//OrderRecyAdapter
public class OrderRecyAdapter extends RecyclerView.Adapter<OrderRecyAdapter.OrderRecyViewHolder>{ private Context context; private List<OrderBean.DataBean> dataBeans; private OrderAdapterCallBack callBack; public OrderRecyAdapter(Context context, List<OrderBean.DataBean> dataBeans) { this.context = context; this.dataBeans = dataBeans; } @Override public OrderRecyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.order_recy_item, parent, false); OrderRecyViewHolder holder = new OrderRecyViewHolder(view); return holder; } @Override public void onBindViewHolder(OrderRecyViewHolder holder, final int position) { holder.order_title.setText(dataBeans.get(position).getTitle()); if(dataBeans.get(position).getStatus() == 0){ holder.order_status.setText("待支付"); holder.order_status.setTextColor(Color.RED); }else if(dataBeans.get(position).getStatus() == 1){ holder.order_status.setText("已支付"); holder.order_status.setTextColor(Color.BLACK); }else if(dataBeans.get(position).getStatus() == 2){ holder.order_status.setText("已取消"); holder.order_status.setTextColor(Color.BLACK); } holder.order_price.setText(String.valueOf(dataBeans.get(position).getPrice())); holder.order_create_time.setText(dataBeans.get(position).getCreatetime()); if(dataBeans.get(position).getStatus() == 0){ holder.order_btn.setText("取消订单"); holder.order_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { callBack.onCancelClick(position); } }); }else if(dataBeans.get(position).getStatus() == 1 || dataBeans.get(position).getStatus() == 2){ holder.order_btn.setText("查看订单"); holder.order_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, "查看订单", Toast.LENGTH_SHORT).show(); } }); } } @Override public int getItemCount() { return dataBeans.size(); } public void setOrderAdapterCallBack(OrderAdapterCallBack callBack){ this.callBack = callBack; } class OrderRecyViewHolder extends RecyclerView.ViewHolder{ public TextView order_title; public TextView order_status; public TextView order_price; public TextView order_create_time; public TextView order_btn; public OrderRecyViewHolder(View itemView) { super(itemView); order_title = itemView.findViewById(R.id.order_title); order_status = itemView.findViewById(R.id.order_status); order_price = itemView.findViewById(R.id.order_price); order_create_time = itemView.findViewById(R.id.order_create_time); order_btn = itemView.findViewById(R.id.order_btn); } } }
jiekou文件夹下
//CartAdapterCallBack
public interface CartAdapterCallBack { void onGroupCheckBoxChanged(int group, boolean isChecked); void onChildCheckBoxChanged(int group, int child, boolean isChecked); void onNumberChanged(int group, int child, int value); }
//OrderAdapterCallBack
public interface OrderAdapterCallBack { void onCancelClick(int position); }
util文件夹下//Api
public class Api { public static String UID = "2752"; public static String TOKEN = "281AAB332365B682754BA7D0D37371D3"; //登录 mobile password token public static String LOGIN = "https://www.zhaoapi.cn/user/login"; //注册 mobile password token public static String REG = "https://www.zhaoapi.cn/user/reg"; //上传头像 uid file token public static String UPLOAD = "https://www.zhaoapi.cn/file/upload"; //用户信息 uid token public static String USER_INFO = "https://www.zhaoapi.cn/user/getUserInfo"; //首页 public static String HOME_PAGE = "https://www.zhaoapi.cn/ad/getAd"; //分类 public static String CLASSIFICATION = "https://www.zhaoapi.cn/product/getCatagory"; //子分类 cid public static String CHILD_CLASSIFICATION = "https://www.zhaoapi.cn/product/getProductCatagory"; //商品详情 pid public static String GOOD_DETAIL = "https://www.zhaoapi.cn/product/getProductDetail"; //子分类下的商品列表 pscid (page sort(0默认1销量2价格)非必填) public static String GOOD_LIST = "https://www.zhaoapi.cn/product/getProducts"; //根据关键词搜索 keywords (page sort(0默认1销量2价格)非必填) public static String KEYWORDS_SEARCH = "https://www.zhaoapi.cn/product/searchProducts"; //修改昵称 uid token nickname public static String UPDATE_NICK_NAME = "https://www.zhaoapi.cn/user/updateNickName"; //添加购物车 uid pid token public static String ADD_CART = "https://www.zhaoapi.cn/product/addCart"; //查询购物车 uid token public static String GET_CARTS = "https://www.zhaoapi.cn/product/getCarts"; //更新购物车 uid sellerid pid selected num token public static String UPDATE_CARTS = "https://www.zhaoapi.cn/product/updateCarts"; //删除购物车 uid pid token public static String DELETE_CART = "https://www.zhaoapi.cn/product/deleteCart"; //创建订单 uid price token public static String CREATE_ORDER = "https://www.zhaoapi.cn/product/createOrder"; //修改订单状态 uid status(0 待支付 1 已支付 2 已取消) orderId token public static String UPDATE_ORDER = "https://www.zhaoapi.cn/product/updateOrder"; //订单列表 uid token (page 非必填) public static String GET_ORDERS = "https://www.zhaoapi.cn/product/getOrders"; //常用收货地址列表 uid token public static String GET_ADDRS = "https://www.zhaoapi.cn/user/getAddrs"; //添加常用收货地址 uid addr mobile name token public static String ADD_ADDR = "https://www.zhaoapi.cn/user/addAddr"; //修改常用收货地址 uid addrid token (mobile name 非必填) public static String UPDATE_ADDR = "https://www.zhaoapi.cn/user/updateAddr"; //设置默认地址 uid addrid status(0:非默认 1:默认) token public static String SET_ADDR = "https://www.zhaoapi.cn/user/setAddr"; //获取默认地址 uid token public static String GET_DEFAULT_ADDR = "https://www.zhaoapi.cn/user/getDefaultAddr"; }
//OkHttp3Util
public class OkHttp3Util { public static OkHttpClient okHttpClient = null; public OkHttp3Util() { } public static OkHttpClient getInstance(){ if(okHttpClient == null){ synchronized (OkHttpClient.class) { if(okHttpClient == null){ File cacheDir = new File(Environment.getExternalStorageDirectory(), "cache"); int cacheSize = 10 * 1024 * 1024; okHttpClient = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) .writeTimeout(15, TimeUnit.SECONDS) .addInterceptor(new CommonParamsInterceptor()) .cache(new Cache(cacheDir, cacheSize)) .build(); } } } return okHttpClient; } public static void doGet(String url, Callback callback){ okHttpClient = getInstance(); Request request = new Request.Builder().url(url).build(); Call call = okHttpClient.newCall(request); call.enqueue(callback); } public static void doPost(String url, Map<String, String> params, Callback callback){ okHttpClient = getInstance(); FormBody.Builder builder = new FormBody.Builder(); for (Map.Entry<String, String> entry : params.entrySet()) { builder.add(entry.getKey(), entry.getValue()); } Request request = new Request.Builder().url(url).post(builder.build()).build(); Call call = okHttpClient.newCall(request); call.enqueue(callback); } /** * 公共参数拦截器 */ private static class CommonParamsInterceptor implements Interceptor { //拦截的方法 @Override public Response intercept(Chain chain) throws IOException { //获取到请求 Request request = chain.request(); //获取请求的方式 String method = request.method(); //获取请求的路径 String oldUrl = request.url().toString(); Log.e("---拦截器",request.url()+"---"+request.method()+"--"+request.header("User-agent")); //要添加的公共参数...map Map<String,String> map = new HashMap<>(); map.put("source","android"); if ("GET".equals(method)){ // 1.http://www.baoidu.com/login --------? key=value&key=value // 2.http://www.baoidu.com/login? --------- key=value&key=value // 3.http://www.baoidu.com/login?mobile=11111 -----&key=value&key=value StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder stringBuilder.append(oldUrl); if (oldUrl.contains("?")){ //?在最后面....2类型 if (oldUrl.indexOf("?") == oldUrl.length()-1){ }else { //3类型...拼接上& stringBuilder.append("&"); } }else { //不包含? 属于1类型,,,先拼接上?号 stringBuilder.append("?"); } //添加公共参数.... for (Map.Entry<String,String> entry: map.entrySet()) { //拼接 stringBuilder.append(entry.getKey()) .append("=") .append(entry.getValue()) .append("&"); } //删掉最后一个&符号 if (stringBuilder.indexOf("&") != -1){ stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&")); } String newUrl = stringBuilder.toString();//新的路径 //拿着新的路径重新构建请求 request = request.newBuilder() .url(newUrl) .build(); }else if ("POST".equals(method)){ //先获取到老的请求的实体内容 RequestBody oldRequestBody = request.body();//....之前的请求参数,,,需要放到新的请求实体内容中去 //如果请求调用的是上面doPost方法 if (oldRequestBody instanceof FormBody){ FormBody oldBody = (FormBody) oldRequestBody; //构建一个新的请求实体内容 FormBody.Builder builder = new FormBody.Builder(); //1.添加老的参数 for (int i=0;i<oldBody.size();i++){ builder.add(oldBody.name(i),oldBody.value(i)); } //2.添加公共参数 for (Map.Entry<String,String> entry:map.entrySet()) { builder.add(entry.getKey(),entry.getValue()); } FormBody newBody = builder.build();//新的请求实体内容 //构建一个新的请求 request = request.newBuilder() .url(oldUrl) .post(newBody) .build(); } } Response response = chain.proceed(request); return response; } } }