使用观察者更新网络

public class MainActivity extends AppCompatActivity implements View.OnClickListener ,ICart{

    private ExpandableListView el;
    private CheckBox isck;
    private TextView price;
    private TextView del;
    private TextView jiesuan;
    private CartPresentr cartPresentr;
    private List<CartBean.DataBean> data;
    private List<CartBean.DataBean.ListBean> childlist=new ArrayList<CartBean.DataBean.ListBean>();
    private List<CartBean.DataBean.ListBean> childlists=new ArrayList<CartBean.DataBean.ListBean>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        cartPresentr = new CartPresentr(this);
        getDataFromNet();
    }

    private void getDataFromNet() {
        cartPresentr.setPath(Api.BaseUrl,"2775");
    }

    private void initView() {
        el = (ExpandableListView) findViewById(R.id.el);
        isck = (CheckBox) findViewById(R.id.isck);
        price = (TextView) findViewById(R.id.price);
        del = (TextView) findViewById(R.id.del);
        jiesuan = (TextView) findViewById(R.id.jiesuan);
        isck.setOnClickListener(this);
        del.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.isck:
                childlist.clear();
                for (int i=0;i<data.size();i++){
                    List<CartBean.DataBean.ListBean> list= data.get(i).getList();
                    for (int j=0;j<list.size();j++){
                        childlist.add(list.get(j));
                    }
                }
                changAllState();
                changePriceAndNum();
                break;
            case R.id.del:
                childlist.clear();
                for (int i=0;i<data.size();i++){
                    List<CartBean.DataBean.ListBean> list= data.get(i).getList();
                    for (int j=0;j<list.size();j++){
                        if (list.get(j).getSelected()==1){
                            childlist.add(list.get(j));
                        }
                    }
                }
                changeStateBydel();
                changePriceAndNum();
                break;
        }
    }

    private void changeStateBydel() {
        List<Observable> observables=new ArrayList<>();
        for (int j=0;j<childlist.size();j++){
            Map<String,String> map=new HashMap<>();
            map.put("uid","2775");
            map.put("pid",String.valueOf(childlist.get(j).getPid()));
            Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).delData(map);
            observables.add(observable);
            Log.d("MainActivity", "map:" + map);
        }
        Observable.merge(observables.toArray(new Observable[childlist.size()]))
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        getDataFromNet();
                    }
                });
    }

    private void changAllState() {
       List<Observable> observables=new ArrayList<>();
        for (int j=0;j<childlist.size();j++){
            Map<String,String> map=new HashMap<>();
            map.put("uid","2775");
            map.put("sellerid",String.valueOf(childlist.get(j).getSellerid()));
            map.put("pid",String.valueOf(childlist.get(j).getPid()));
            map.put("num",String.valueOf(childlist.get(j).getNum()));
            map.put("selected",String.valueOf(isck.isChecked()?1:0));
            Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map);
            observables.add(observable);
            Log.d("MainActivity", "map:" + map);
        }
        Observable.merge(observables.toArray(new Observable[childlist.size()]))
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        getDataFromNet();
                    }
                });

    }

    @Override
    public void success(CartBean cartBean) {
     //  Log.i("pppppppmain",cartBean.getMsg());
        if (cartBean==null&&data!=null){
         data.clear();
        }else {
            data = cartBean.getData();
        }
        setAdapter();
    }

    private void setAdapter() {
        //改变全选的状态
        isck.setChecked(childIsChick());
        //改变组的状态
        for (int j=0;j<data.size();j++){
            data.get(j).setGroupIsck(childIsAllCheck(data.get(j).getList()));
        }
         CartAdapter cartAdapter= new CartAdapter(MainActivity.this, data);
         el.setAdapter(cartAdapter);
         for (int i=0;i<data.size();i++){
             el.expandGroup(i);
         }
         cartAdapter.setLinstner(new IPosition() {
             @Override
             public void getGroup(int group, Boolean b) {
                 Log.d("MainActivity1", "data.get(group).getList().size():" + data.get(group).getList().size());
                 changeStateByGroup(data.get(group).getList(),b);
                 changePriceAndNum();
             }

             @Override
             public void getChild(int group, int child, Boolean b) {
                 childlists.clear();
                 CartBean.DataBean.ListBean listBean= data.get(group).getList().get(child);
                  childlists.add(listBean);
                  changeStateByChild(b);
                  changePriceAndNum();
             }

             @Override
             public void onChildNumberAddOrSub(int group, int child, int value) {
                 childlists.clear();
                 CartBean.DataBean.ListBean listBean= data.get(group).getList().get(child);
                 childlists.add(listBean);
                 changeStateByNum(value);
                 changePriceAndNum();
             }
         });
        changePriceAndNum();
    }

    private void changeStateByNum(int value) {
        Observable[] observables=new Observable[childlists.size()];
        for (int j=0;j<childlists.size();j++){
            Map<String,String> map=new HashMap<>();
            map.put("uid","2775");
            map.put("sellerid",String.valueOf(childlists.get(j).getSellerid()));
            map.put("pid",String.valueOf(childlists.get(j).getPid()));
            map.put("num",String.valueOf(value));
            map.put("selected",String.valueOf(childlists.get(j).getSelected()));
            Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map);
            observables[j]=(observable);
            Log.d("MainActivity", "map:" + map);
        }
        Observable.merge(observables)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        getDataFromNet();
                    }
                });
    }

    private void changePriceAndNum() {
        int num=0;
        int sum=0;
        for (int i=0;i<data.size();i++){
            List<CartBean.DataBean.ListBean> list= data.get(i).getList();
            for (int j=0;j<list.size();j++){
                if (list.get(j).getSelected()==1){
                    num+=list.get(j).getNum();
                    sum+=num*Double.valueOf(list.get(j).getBargainPrice());
                }

            }
        }
        jiesuan.setText("去结算"+num);
        price.setText(""+sum);
    }

    private void changeStateByChild(Boolean b) {
        Observable[] observables=new Observable[childlists.size()];
        for (int j=0;j<childlists.size();j++){
            Map<String,String> map=new HashMap<>();
            map.put("uid","2775");
            map.put("sellerid",String.valueOf(childlists.get(j).getSellerid()));
            map.put("pid",String.valueOf(childlists.get(j).getPid()));
            map.put("num",String.valueOf(childlists.get(j).getNum()));
            map.put("selected",String.valueOf(b?1:0));
            Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map);
            observables[j]=(observable);
            Log.d("MainActivity", "map:" + map);
        }
        Observable.merge(observables)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        getDataFromNet();
                    }
                });
    }

    private void changeStateByGroup(List<CartBean.DataBean.ListBean> list, Boolean b) {
        Observable[] observables=new Observable[list.size()];
        for (int j=0;j<list.size();j++){
            Map<String,String> map=new HashMap<>();
            map.put("uid","2775");
            map.put("sellerid",String.valueOf(list.get(j).getSellerid()));
            map.put("pid",String.valueOf(list.get(j).getPid()));
            map.put("num",String.valueOf(list.get(j).getNum()));
            map.put("selected",String.valueOf(b?1:0));
            Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map);
            observables[j]=(observable);
            Log.d("MainActivity", "map:" + map);
        }
        Observable.merge(observables)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        getDataFromNet();
                    }
                });
    }

    private boolean childIsAllCheck(List<CartBean.DataBean.ListBean> list) {
        for (int j=0;j<list.size();j++){
            if (list.get(j).getSelected()==0) {
                return false;
            }
        }
        return true;
    }

    private boolean childIsChick() {
        for (int i=0;i<data.size();i++){
            List<CartBean.DataBean.ListBean> list= data.get(i).getList();
            for (int j=0;j<list.size();j++){
                if (list.get(j).getSelected()==0) {
                    return false;
                }
            }
        }
        return true;
    }
}
 
public interface SerViceAPI {
    @FormUrlEncoded
    @POST("product/getCarts")
    Call<ResponseBody>  getData(@Field("uid") String uid);
    @FormUrlEncoded
    @POST("product/updateCarts")
    Observable<String> gengData(@FieldMap Map<String,String> map);
    @FormUrlEncoded
    @POST("product/deleteCart")
    Observable<String> delData(@FieldMap Map<String,String> map);
    //
}

 
public class Api {
    public static final String BaseUrl="http://120.27.23.105/";
}
public class CartModel {
    private CartPresentr cartPresentr;


    public CartModel(CartPresentr cartPresentr) {
        this.cartPresentr = cartPresentr;
    }


    public void setPath(String baseUrl, String uid) {


        RetrofitHelper.getApiService(baseUrl).getCart(uid)
                .enqueue(new Callback<ResponseBody>() {


                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                        if (response.isSuccessful() && response.body() != null) {
                            try {
                                String string= response.body().string();
                                CartBean cartBean = new Gson().fromJson(string, CartBean.class);
                                Log.d("CartModel", cartBean.getCode());
                                cartPresentr.success(cartBean);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }


                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {


                    }
                });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值