服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android实现购物车整体页面逻辑详解

Android实现购物车整体页面逻辑详解

2022-08-24 14:28FanRQ_ Android

这篇文章主要为大家详细介绍了Android实现购物车的整体页面逻辑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家讲解了Android实现购物车的整体页面逻辑,供大家参考,具体内容如下

MainActivity.java

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 
  String url = "http://www.zhaoapi.cn/product/getCarts";
  private ExpandableListView el_cart;
  private CheckBox cb_cart_all_select;
  private TextView tv_cart_total_price;
  private Button btn_cart_pay;
  MyAdapter adapter;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    initView();
    initData();
  }
 
  private void initData() {
 
    HashMap<String, String> map = new HashMap<>();
    map.put("uid","71");
    OkhtttpUtils.getInstance().doPost(url, map, new OkhtttpUtils.OkCallback() {
      @Override
      public void onFailure(Exception e) {
 
      }
 
      @Override
      public void onResponse(String json) {
 
        CartInfo cartInfo = new Gson().fromJson(json, CartInfo.class);
        if ("0".equals(cartInfo.getCode())){
          List<CartInfo.DataBean> data = cartInfo.getData();
          adapter = new MyAdapter(data);
          el_cart.setAdapter(adapter);
 
          //展开二级列表
          for(int x=0; x<data.size(); x++){
            el_cart.expandGroup(x);
          }
 
          adapter.setOnCartListChangeListener(new MyAdapter.onCartListChangeListener() {
            @Override
            public void onSellerCheckedChange(int i) {
 
              //商家被点击
              boolean currentSellerAllProductSelected = adapter.isCurrentSellerAllProductSelected(i);
              adapter.changeCurrentSellerAllProductsStatus(i, !currentSellerAllProductSelected);
              adapter.notifyDataSetChanged();
              //B.刷新底部数据
              refreshSelectedAndTotalPriceAndTotalNumber();
            }
 
            @Override
            public void onProductCheckedChange(int i, int i1) {
 
              //点击商品得checkbox
              adapter.changeCurrentProductStatus(i,i1);
              adapter.notifyDataSetChanged();
              //B.刷新底部数据
              refreshSelectedAndTotalPriceAndTotalNumber();
            }
 
            @Override
            public void onProducNumberChange(int i, int i1, int number) {
 
              //当加减被点击
              adapter.changeCurrentProductNumber(i,i1,number);
              adapter.notifyDataSetChanged();
              //B.刷新底部数据
              refreshSelectedAndTotalPriceAndTotalNumber();
            }
          });
        }
      }
    });
  }
 
  //B.刷新checkbox状态和总价和总数量
  private void refreshSelectedAndTotalPriceAndTotalNumber() {
    //去判断是否所有得商品都被选中
    boolean allProductsSelected = adapter.isAllProductsSelected();
    //设置给全选checkBox
    cb_cart_all_select.setChecked(allProductsSelected);
 
    //计算总价
    float totalPrice = adapter.calculateTotalPrice();
    tv_cart_total_price.setText("总价 " + totalPrice);
 
    //计算总数量
    int totalNumber = adapter.calculateTotalNumber();
    btn_cart_pay.setText("去结算(" + totalNumber + ")");
  }
 
  //初始化的操作
  private void initView() {
    el_cart = (ExpandableListView) findViewById(R.id.el_cart);
    cb_cart_all_select = (CheckBox) findViewById(R.id.cb_cart_all_select);
    tv_cart_total_price = (TextView) findViewById(R.id.tv_cart_total_price);
    btn_cart_pay = (Button) findViewById(R.id.btn_cart_pay);
 
    cb_cart_all_select.setOnClickListener(this);
  }
 
  @Override
  public void onClick(View view) {
 
    switch (view.getId()){
      case R.id.cb_cart_all_select:
 
        //底部全选按钮
        //时候所有得商品都被选中
        boolean allProductsSelected = adapter.isAllProductsSelected();
        adapter.changeAllProductStatus(!allProductsSelected);
        adapter.notifyDataSetChanged();
        //刷新底部数据
        refreshSelectedAndTotalPriceAndTotalNumber();
        break;
    }
  }
}

MyAdapter.java

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
public class MyAdapter extends BaseExpandableListAdapter{
 
  private List<CartInfo.DataBean> list;
  public MyAdapter(List<CartInfo.DataBean> data) {
    list=data;
  }
 
  @Override
  public int getGroupCount() {
    return list==null ? 0 : list.size();
  }
 
  @Override
  public int getChildrenCount(int i) {
    return list.get(i).getList()==null ? 0 :list.get(i).getList().size();
  }
 
  @Override
  public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
 
    //先拿到Bean里组的数据,看hiJson
    CartInfo.DataBean dataBean = list.get(i);
    ParentViewHolder parentViewHolder;
    if (view == null) {
      view = View.inflate(viewGroup.getContext(), R.layout.item_cart_parent, null);
      parentViewHolder = new ParentViewHolder(view);
      view.setTag(parentViewHolder);
    } else {
      parentViewHolder = (ParentViewHolder) view.getTag();
    }
    parentViewHolder.seller_name_tv.setText(dataBean.getSellerName());
 
    boolean currentSellerAllProductSelected = isCurrentSellerAllProductSelected(i);
    parentViewHolder.seller_cb.setChecked(currentSellerAllProductSelected);
 
    //D.设置点击CheckBox
    parentViewHolder.seller_cb.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mOnCartListChangeListener !=null){
          mOnCartListChangeListener.onSellerCheckedChange(i);
        }
      }
    });
    return view;
  }
 
 
  @Override
  public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
 
    CartInfo.DataBean dataBean = list.get(i);
    List<CartInfo.DataBean.ListBean> list1 = dataBean.getList();
    CartInfo.DataBean.ListBean listBean = list1.get(i1);
    ChildViewHolder childViewHolder;
 
 
    if (view == null) {
      view = View.inflate(viewGroup.getContext(), R.layout.item_cart_child, null);
      childViewHolder = new ChildViewHolder(view);
      view.setTag(childViewHolder);
    } else {
      childViewHolder=(ChildViewHolder)view.getTag();
    }
    //设置商品名字
    childViewHolder.product_title_name_tv.setText(listBean.getTitle());
    //设置商品单价
    childViewHolder.product_price_tv.setText(listBean.getPrice()+"");
    //设置复选框是否选中
    childViewHolder.child_cb.setChecked(listBean.getSelected() == 1);
 
    //设置组合式自定义控件内部的数量
    childViewHolder.add_remove_view.setNumber(listBean.getNum());
 
    //D.设置商品CheckBox的点击事件,通过接口回调,暴露给外面
    childViewHolder.child_cb.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mOnCartListChangeListener != null){
          mOnCartListChangeListener.onProductCheckedChange(i,i1);
        }
      }
    });
 
    //D.设置商品数量的点击事件,通过接口回调,暴露给外面
    childViewHolder.add_remove_view.setOnNumberChangeListener(new AddSubView.OnNumberChangeListener() {
      @Override
      public void onNumberChange(int num) {
        if (mOnCartListChangeListener !=null){
          mOnCartListChangeListener.onProducNumberChange(i,i1,num);
        }
      }
    });
    return view;
  }
 
  public boolean isCurrentSellerAllProductSelected(int i){//根据商品改变商家--如果商品全部选中商家则选中--有一个商品没选中则商家不选中
    CartInfo.DataBean dataBean = list.get(i);
    List<CartInfo.DataBean.ListBean> beans = dataBean.getList();
    for (CartInfo.DataBean.ListBean bean : beans){
 
      if (bean.getSelected()==0){
        return false;
      }
 
    }
        return true;
  }
 
  public boolean isAllProductsSelected(){ //根据商品改变全选--如果商品全部选中全选则选中--有一个商品没选中则全选不选中
    for (int x=0;x<list.size();x++){
      CartInfo.DataBean dataBean = list.get(x);
      List<CartInfo.DataBean.ListBean> list1 = dataBean.getList();
      for (int j=0;j<list1.size();j++){
        if (list1.get(j).getSelected()==0){
          return false;
        }
      }
    }
    return true;
  }
 
  public int calculateTotalNumber(){ //计算总数量
    int totalNumber=0;
    for (int i=0;i<list.size();i++){
      CartInfo.DataBean dataBean = list.get(i);
      List<CartInfo.DataBean.ListBean> list1 = dataBean.getList();
      for (int j=0;j<list1.size();j++){
        if (list1.get(j).getSelected()==1){
          int num = list1.get(j).getNum();
 
          totalNumber+=num;
        }
      }
    }
 
    return totalNumber;
  }
 
 
  public float calculateTotalPrice(){ //获取总价
    float totalPrice=0;
    for (int i=0;i<list.size();i++){
      CartInfo.DataBean dataBean = list.get(i);
      List<CartInfo.DataBean.ListBean> list = dataBean.getList();
      for (int j=0;j<list.size();j++){
        if (list.get(j).getSelected()==1){
          float price = list.get(j).getPrice();
          int num = list.get(j).getNum();
          totalPrice+=price*num;
        }
      }
    }
    return totalPrice;
  }
  //C.当商品组的全选框点击时,更新所有商品的状态
  public void changeCurrentSellerAllProductsStatus(int i,boolean isSelected){
 
    CartInfo.DataBean dataBean = list.get(i);
    List<CartInfo.DataBean.ListBean> beans = dataBean.getList();
    for (int j=0;j<beans.size();j++){
      CartInfo.DataBean.ListBean bean = beans.get(j);
      bean.setSelected(isSelected ?1 :0);
    }
  }
 
  //C.当商家子条目的全选框选中时,更新其状态
  public void changeCurrentProductStatus(int i , int i1){
    CartInfo.DataBean dataBean = list.get(i);
    List<CartInfo.DataBean.ListBean> list = dataBean.getList();
    CartInfo.DataBean.ListBean listBean = list.get(i1);
    listBean.setSelected(listBean.getSelected() == 0 ? 1 : 0 );
 
  }
  //C.设置所有商品的状态
  public void changeAllProductStatus(boolean selected){
    for(int x=0; x<list.size() ; x++){
      CartInfo.DataBean dataBean = list.get(x);
      List<CartInfo.DataBean.ListBean> list = dataBean.getList();
      for(int j=0; j<list.size(); j++){
        list.get(j).setSelected(selected ? 1 : 0);
      }
    }
  }
 
  //C.当加减器被点击时,调用,改变里面当前商品的数量 参数1定位那个商家  参数2定位哪个商品 参数3定位改变具体的数量是多少
  public void changeCurrentProductNumber(int i,int i1,int number){
    CartInfo.DataBean dataBean = list.get(i);
    List<CartInfo.DataBean.ListBean> list = dataBean.getList();
    CartInfo.DataBean.ListBean listBean = list.get(i1);
    listBean.setNum(number);
  }
 
  public interface onCartListChangeListener{
    /**
     * 当商家的checkBox点击时回调
     */
    void onSellerCheckedChange(int i);
 
    /**
     * 当点击子条目商品的CheckBox回调
     */
    void onProductCheckedChange(int i ,int i1);
 
    /**
     * 当点击加减按钮的回调
     */
    void onProducNumberChange(int i , int i1 , int number);
 
  }
  //D.
  onCartListChangeListener mOnCartListChangeListener;
  //D.
  public void setOnCartListChangeListener(onCartListChangeListener onCartListChangeListener){
    mOnCartListChangeListener = onCartListChangeListener ;
  }
 
  public static class ParentViewHolder {
    public CheckBox seller_cb;
    public TextView seller_name_tv;
 
    public ParentViewHolder(View rootView) {
      this.seller_cb = (CheckBox) rootView.findViewById(R.id.seller_cb);
      this.seller_name_tv = (TextView) rootView.findViewById(R.id.seller_name_tv);
    }
  }
 
  public static class ChildViewHolder {
    public CheckBox child_cb;
    public ImageView product_icon_iv;
    public TextView product_title_name_tv;
    public TextView product_price_tv;
    public AddSubView add_remove_view;
 
    public ChildViewHolder(View rootView) {
      this.child_cb = (CheckBox) rootView.findViewById(R.id.child_cb);
      this.product_icon_iv = (ImageView) rootView.findViewById(R.id.product_icon_iv);
      this.product_title_name_tv = (TextView) rootView.findViewById(R.id.product_title_name_tv);
      this.product_price_tv = (TextView) rootView.findViewById(R.id.product_price_tv);
      this.add_remove_view = (AddSubView) rootView.findViewById(R.id.add_remove_view);
    }
  }
 
  @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 boolean isChildSelectable(int i, int i1) {
    return false;
  }
}

activity_main.xml

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
 
  <ExpandableListView
    android:id="@+id/el_cart"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="60dp" />
 
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:background="#eeeeee"
    android:gravity="center_vertical">
 
    <CheckBox
      android:id="@+id/cb_cart_all_select"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />
 
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="全选" />
 
    <TextView
      android:id="@+id/tv_cart_total_price"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:paddingLeft="20dp"
      android:text="合计:¥0.00" />
 
    <Button
      android:id="@+id/btn_cart_pay"
      android:layout_width="100dp"
      android:layout_height="match_parent"
      android:text="去结算(0)" />
  </LinearLayout>
 
</RelativeLayout>

AddSubView.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class AddSubView extends LinearLayout implements View.OnClickListener{  //组合式控件
  private int number = 1;
  private TextView sub_tv;
  private TextView product_number_tv;
  private TextView add_tv;
 
  public AddSubView(Context context) {
    this(context,null);
  }
 
  public AddSubView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs,0);
  }
 
  public AddSubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
 
    View view = inflate(context, R.layout.add_remove, this);
 
    sub_tv=view.findViewById(R.id.sub_tv);
    product_number_tv=view.findViewById(R.id.product_number_tv);
    add_tv=view.findViewById(R.id.add_tv);
 
 
    sub_tv.setOnClickListener(this);
    add_tv.setOnClickListener(this);
  }
 
  @Override
  public void onClick(View view) {
    switch (view.getId()){
 
      case R.id.sub_tv:
 
        if (number>1){
          --number;
          product_number_tv.setText(number+"");
          if (onNumberChangeListener!=null){
            onNumberChangeListener.onNumberChange(number);
          }
        }else {
          Toast.makeText(getContext(), "不能再少了", Toast.LENGTH_SHORT).show();
        }
        break;
 
      case R.id.add_tv:
 
        if (number<8){
          ++number;
          product_number_tv.setText(number+"");
          if (onNumberChangeListener!=null){
            onNumberChangeListener.onNumberChange(number);
          }
        }else {
          Toast.makeText(getContext(), "不能再多了", Toast.LENGTH_SHORT).show();
        }
        break;
    }
  }
 
  public int getNumber() {
    return number;
  }
 
  public void setNumber(int number) {
    this.number = number;
    product_number_tv.setText(number + "");
  }
 
  OnNumberChangeListener onNumberChangeListener;
 
  public void setOnNumberChangeListener(OnNumberChangeListener onNumberChangeListener) {
    this.onNumberChangeListener = onNumberChangeListener;
  }
 
  interface OnNumberChangeListener {
    void onNumberChange(int num);
  }
}

add_remove.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:padding="2dp"
  android:layout_marginLeft="10dp"
  android:layout_width="60dp"
  android:layout_height="30dp"
  android:layout_gravity="center_vertical"
  android:background="#99000000"
  android:gravity="center_vertical">
 
  <TextView
    android:background="#ffffff"
    android:layout_weight="1"
    android:id="@+id/sub_tv"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="-"
    android:textSize="16sp" />
 
  <TextView
    android:text="1"
    android:layout_marginLeft="2dp"
    android:background="#ffffff"
    android:layout_weight="1"
    android:id="@+id/product_number_tv"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:gravity="center"
    />
 
  <TextView
    android:layout_marginLeft="2dp"
    android:background="#ffffff"
    android:layout_weight="1"
    android:id="@+id/add_tv"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="+"
    android:textSize="16sp" />
 
</LinearLayout>

item_cart_parent.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   //商家条目
  android:layout_width="match_parent"
  android:layout_height="60dp"
  android:gravity="center_vertical"
  >
 
 
  <CheckBox
    android:id="@+id/seller_cb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
 
  <TextView
    android:id="@+id/seller_name_tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp" />
</LinearLayout>

item_cart_child.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="120dp"
  android:gravity="center_vertical">
 
  <CheckBox
    android:id="@+id/child_cb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
 
  <ImageView
    android:id="@+id/product_icon_iv"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_marginLeft="20dp"
    android:scaleType="centerCrop"
    android:src="@color/colorPrimary" />
 
  <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical">
 
    <TextView
      android:id="@+id/product_title_name_tv"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:ellipsize="end"
      android:maxLines="2"
      android:text="商品标题" />
 
    <TextView
      android:id="@+id/product_price_tv"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="10dp"
      android:text="¥0.0" />
  </LinearLayout>
 
  <fanruiqi.bwie.com.shopcat.AddSubView
    android:id="@+id/add_remove_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp" />
</LinearLayout>

OkHttpUtils.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
public class OkhtttpUtils {
  private static OkhtttpUtils mOkhtttpUtils;
  private OkHttpClient mOkHttpClien;
  private final Handler mHandler;
 
  private OkhtttpUtils() {
 
    //创建一个主线程的handler
    mHandler = new Handler(Looper.getMainLooper());
    mOkHttpClien = new OkHttpClient.Builder()
        .connectTimeout(5000, TimeUnit.MILLISECONDS)
        .readTimeout(5000, TimeUnit.MILLISECONDS)
        .writeTimeout(5000, TimeUnit.MILLISECONDS)
        .build();
  }
 
  //单例模式
  public static OkhtttpUtils getInstance() {
    if (mOkhtttpUtils == null) {
      synchronized (OkhtttpUtils.class) {
        if (mOkhtttpUtils == null) {
          return mOkhtttpUtils = new OkhtttpUtils();
        }
      }
    }
    return mOkhtttpUtils;
  }
 
  public interface OkCallback {
    void onFailure(Exception e);
    void onResponse(String json);
  }
 
 
  public void doPost(String url, Map<String, String> map, final OkCallback okCallback) {
    //创建FormBody的对象,把表单添加到formBody中
    FormBody.Builder builder = new FormBody.Builder();
    if (map != null) {
      for (String key : map.keySet()) {
        builder.add(key, map.get(key));
      }
    }
    FormBody formBody = builder.build();
 
    //创建Request对象
    Request request = new Request.Builder()
        .post(formBody)
        .url(url)
        .build();
    //创建Call对象
    final Call call = mOkHttpClien.newCall(request);
    call.enqueue(new Callback() {
      @Override
      public void onFailure(Call call, final IOException e) {
        if (okCallback != null) {
          //切换到主线程
          mHandler.post(new Runnable() {
            @Override
            public void run() {
              okCallback.onFailure(e);
            }
          });
        }
      }
      @Override
      public void onResponse(Call call, final Response response) throws IOException {
        try {
          if (response != null && response.isSuccessful()) {
            final String json = response.body().string();
            mHandler.post(new Runnable() {
              @Override
              public void run() {
                if (okCallback != null) {
                  okCallback.onResponse(json);
                  return;
                }
              }
            });
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
        if (okCallback != null) {
          okCallback.onFailure(new Exception("网络异常"));
        }
      }
    });
  }
 
 
 
 
  //封装doGet的网络请求
  public void doGet(String url, final OkCallback okCallback) {
    Request request = new Request.Builder()
        .get()
        .url(url)
        .build();
 
    final Call call = mOkHttpClien.newCall(request);
    call.enqueue(new Callback() {
      @Override
      public void onFailure(Call call, final IOException e) {
        if (okCallback != null) {
          //切换到主线程
          mHandler.post(new Runnable() {
            @Override
            public void run() {
              okCallback.onFailure(e);
            }
          });
        }
      }
 
      @Override
      public void onResponse(Call call, final Response response) throws IOException {
 
        try {
          if (response != null && response.isSuccessful()) {
            final String json = response.body().string();
            mHandler.post(new Runnable() {
              @Override
              public void run() {
                if (okCallback != null) {
                  okCallback.onResponse(json);
                  return;
                }
 
              }
            });
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
 
      }
    });
  }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/FanRQ_/article/details/84316536

延伸 · 阅读

精彩推荐