Android购物车

//配置清单文件
<uses-permission android:name="android.permission.INTERNET" />
--------
 <activity android:name=".view.MainActivity"></activity><activity android:name=".view.SplashActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>
-------------------------------------------------------
//依赖
compile 'com.squareup.okhttp3:okhttp:3.3.0'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.squareup.okio:okio:1.5.0'
compile 'com.github.bumptech.glide:glide:3.6.1'
-----------------------------------------------------\
Utils层
public class HttpConfig {
    public static String detail_url = "https://www.zhaoapi.cn/product/getProductDetail";
    public static String add_url = "https://www.zhaoapi.cn/product/addCart";
    public static String cartList_url = "https://www.zhaoapi.cn/product/getCarts";
}
-------------------------------------------------------
public class OkHttpUtils {
       private static OkHttpUtils okHttpUtils = null;
          private MyHandler myHandler = new MyHandler();
          private OkLoadListener okLoadListener;

          //单例
          public static OkHttpUtils getInstance() {
             if (okHttpUtils == null) {
                okHttpUtils = new OkHttpUtils();
             }
             return okHttpUtils;
          }

          //get
          public void okGet(String url) {
             OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyInter()).build();
             Request request = new Request.Builder().url(url).build();
             Call call = client.newCall(request);
             call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                   Message message = myHandler.obtainMessage();
                   message.what = 0;
                   message.obj = e.getMessage();
                   myHandler.sendMessage(message);
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                   Message message = myHandler.obtainMessage();
                   message.what = 1;
                   message.obj = response.body().string();
                   myHandler.sendMessage(message);
                }
             });
          }

          //post
          public void okPost(String url, Map<String, String> map) {
             OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyInter()).build();
             //创建FormBody
             FormBody.Builder builder = new FormBody.Builder();
             //遍历map
             Set<String> keys = map.keySet();
             for (String key : keys) {
                String value = map.get(key);
                builder.add(key, value+"");
             }
             //build
             FormBody body = builder.build();
             Request request = new Request.Builder().url(url).post(body).build();
             Call call = client.newCall(request);
             call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                   Message message = myHandler.obtainMessage();
                   message.what = 0;
                   message.obj = e.getMessage();
                   myHandler.sendMessage(message);
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                   Message message = myHandler.obtainMessage();
                   message.what = 1;
                   message.obj = response.body().string();
                   myHandler.sendMessage(message);
                }
             });
          }

          //拦截器
          class MyInter implements Interceptor {
             private static final String TAG = "MyInter";
             @Override
             public Response intercept(Chain chain) throws IOException {
                //获取原来的body
                Request request = chain.request();
                RequestBody body = request.body();
                if (body instanceof FormBody) {
                   //遍历原来的所有参数,加到新的Body里面,最后将公共参数加到新的Body
                   FormBody.Builder newBuilder = new FormBody.Builder();
                   for (int i = 0; i < ((FormBody) body).size(); i++) {
                      String name = ((FormBody) body).name(i);
                      String value = ((FormBody) body).value(i);

                      //放入新的
                      newBuilder.add(name, value);
                   }
                   //在将公共参数添加进去
                   newBuilder.add("source", "android");
                   FormBody newBody = newBuilder.build();
                   //创建新的请求
                   Request newRequest = request.newBuilder().post(newBody).build();
                   Response response = chain.proceed(newRequest);
                   return response;
                }

                return null;
             }
          }

          //handler
          class MyHandler extends Handler {
             @Override
             public void handleMessage(Message msg) {
                switch (msg.what) {
                   case 0:
                      //失败
                      String e = (String) msg.obj;
                      okLoadListener.okLoadError(e);
                      break;
                   case 1:
                      //成功
                      String json = (String) msg.obj;
                      okLoadListener.okLoadSuccess(json);
                      break;
                }
             }
          }

          //提高外部调用的接口
          public void setOkLoadListener(OkLoadListener okLoadListener) {
             this.okLoadListener = okLoadListener;
          }
}
-----------------------------------------------------------
public interface OkLoadListener {
    //网络请求成功
    void okLoadSuccess(String json);
    //网络请求失败
    void okLoadError(String error);
}


-------------------------------------------------------
Model层
public interface AddCartListener {
//添加成功
  void addCartSuccecc(String json);
//添加失败
 void addCartError(String json);
}
---------------------------------------------------------
public interface CartListLoadListener {
    void cartLoadSuccess(String json);
    void cartLoadError(String error);
}
------------------------------------------------------
public interface DetailLoadListener {
    void detailLoadSuccess(String json);
    void detailLoadError(String json);
}
-------------------------------------------------------
public interface Imodel {
    //详情页
    void getDetailData(String url, Map<String,String> map,DetailLoadListener detailLoadListener);
    //添加购物车
    void addToCart(String url,Map<String,String> map,AddCartListener addCartListener);
    //查询数据
    void showDataToCart(String url,Map<String,String> map,CartListLoadListener cartListLoadListener);
    //计算总价
    double countAll(CartBean cartBean);
}
*------------------------------------------------------
public class ModelImpl implements Imodel{
    @Override
    public void getDetailData(String url, Map<String, String> map, final DetailLoadListener detailLoadListener) {
        OkHttpUtils instance = OkHttpUtils.getInstance();
        instance.okPost(url,map);
        instance.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                //Log.d("请求数据",json);
                detailLoadListener.detailLoadSuccess(json);
            }

            @Override
            public void okLoadError(String error) {
                detailLoadListener.detailLoadError(error);
            }
        });

    }

    @Override
    public void addToCart(String url, Map<String, String> map, final AddCartListener addCartListener) {
        OkHttpUtils instance = OkHttpUtils.getInstance();
        instance.okPost(url,map);
        instance.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                addCartListener.addCartSuccecc(json);
            }

            @Override
            public void okLoadError(String error) {
                addCartListener.addCartError(error);
            }
        });
    }

    @Override
    public void showDataToCart(String url, Map<String, String> map, final CartListLoadListener cartListLoadListener) {
        OkHttpUtils instance = OkHttpUtils.getInstance();
        instance.okPost(url,map);
        instance.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                cartListLoadListener.cartLoadSuccess(json);
            }

            @Override
            public void okLoadError(String error) {
                cartListLoadListener.cartLoadError(error);
            }
        });
    }

    @Override
    public double countAll(CartBean cartBean) {
        int num=0;
        List<CartBean.DataBean> data = cartBean.getData();
        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).getChildflag()) {
                    double gbp = list.get(j).getPrice();
                    num+=gbp;
                }
            }
        }
        return num;
    }
}
----------------------------------------------------------------------
Prosenter层
public interface IProsenter {
    //详情页
    void showDetailToData(Imodel imodel, IMainView iMainView);
    //添加购物车
    void addToCart(Imodel imodel,IMainView iMainView);
    //购物车数据
    void showDataToCart(Context context, Imodel imodel, ICartView iCartView);
    void countAll(Imodel imodel,ICartView iCartView,CartBean cartBean);
}
----------------------------------------------------------------------
public class PreSenterImpl implements IProsenter {
    private static final String TAG = "PreSenterImpl";
    @Override
    public void showDetailToData(Imodel imodel, final IMainView iMainView) {
       // Log.d("请求数据","走没走");
        Map<String,String> map=new HashMap<String, String>();
        map.put("pid","71");
        imodel.getDetailData(HttpConfig.detail_url, map, new DetailLoadListener() {
            @Override
            public void detailLoadSuccess(String json) {
                Log.d("请求数据----",json);
                Gson gson = new Gson();
                DetailBean bean = gson.fromJson(json, DetailBean.class);
                iMainView.showDetailData(bean);
            }
            @Override
            public void detailLoadError(String json) {
                Log.d(TAG, "失败");
            }
        });
    }

    @Override
    public void addToCart(Imodel imodel, final IMainView iMainView) {
        Map<String,String> map=new HashMap<String, String>();
        map.put("pid",iMainView.getPid());
        map.put("uid","71");
        imodel.addToCart(HttpConfig.add_url, map, new AddCartListener() {
            @Override
            public void addCartSuccecc(String json) {
                try {
                    JSONObject obj=new JSONObject(json);
                    String code = obj.getString("code");
                    if (code.equals("0")){
                        iMainView.showAddSuccsee(json);
                        Log.d(TAG, "添加数据成功");
                    }else {
                        iMainView.showAddError(json);
                        Log.d(TAG, "添加数据失败");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void addCartError(String json) {
                iMainView.showAddError(json);
            }
        });
    }

    @Override
    public void showDataToCart(final Context context, Imodel imodel, final ICartView iCartView) {
        Map<String,String> map=new HashMap<String, String>();
        map.put("uid","71");
        imodel.showDataToCart(HttpConfig.cartList_url, map, new CartListLoadListener() {
            @Override
            public void cartLoadSuccess(String json) {
                Gson gson = new Gson();
                CartBean cart = gson.fromJson(json, CartBean.class);
                Log.d("显示数据", cart.toString());
                iCartView.showDataToCart(context,cart);
            }

            @Override
            public void cartLoadError(String error) {

            }
        });
    }

    @Override
    public void countAll(Imodel imodel, ICartView iCartView, CartBean cartBean) {
        double all = imodel.countAll(cartBean);
        Log.d("总价格", all+"");
            iCartView.showNum(all);
    }

}
----------------------------------------------------------------------------------
//View层
public class AnimatorUtils {
    public static AnimatorSet setAnimatorSet(Context context, View view){
        //获取屏幕宽度的一半  属性动画
        int pixels = context.getResources().getDisplayMetrics().heightPixels;
        ObjectAnimator translationY = ObjectAnimator.ofFloat(view, "translationY", 0, pixels / 2);
        ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 2.0f, 1.0f);
        ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 2.0f, 1.0f);
        ObjectAnimator alpha = ObjectAnimator.ofFloat(view, "alpha", 0, 1.0f);
        ObjectAnimator rotation = ObjectAnimator.ofFloat(view, "rotation", 0, 360);
        AnimatorSet set=new AnimatorSet();
        set.playTogether(translationY,scaleX,scaleY,alpha,rotation);
        set.setDuration(3000);
        set.start();
        return set;
    }
}
-------------------------------------------------------------------------------------------
public class SplashActivity extends AppCompatActivity {

    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        initViews();

    }
    private void initViews() {
        img = (ImageView) findViewById(R.id.splash_img);
        AnimatorSet set = AnimatorUtils.setAnimatorSet(SplashActivity.this, img);
        set.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
            startActivity(new Intent(SplashActivity.this,MainActivity.class));
            //加跳转动画
                overridePendingTransition(R.anim.enter,R.anim.out);
                //结束本页面
                finish();
            }
        });
    }
}
----------------------------------------------------------------------------------------------
public interface ICartView {
    void showDataToCart(Context context,CartBean cartBean);
    void showNum(double num);
    CartBean getCartBean();
}

-------------------------------------------------------------------------------------------
public class CartActivity extends AppCompatActivity implements ICartView{

    private ExpandableListView exp;
    private CheckBox box;
    private TextView priceAll;
    private CartBean cartBean;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        initViews();
        PreSenterImpl preSenter=new PreSenterImpl();
        preSenter.showDataToCart(this,new ModelImpl(),this);
    }

    private void initViews() {
        exp = (ExpandableListView) findViewById(R.id.cart_exp);
        box = (CheckBox) findViewById(R.id.cart_box);
        priceAll = (TextView) findViewById(R.id.cart_priceAll);
        box.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<CartBean.DataBean> data = cartBean.getData();
                for (int i = 0; i < data.size(); i++) {
                    data.get(i).setGroupflag(!data.get(i).getGroupflag());
                    List<CartBean.DataBean.ListBean> list = data.get(i).getList();
                    for (int j = 0; j < list.size(); j++) {
                        list.get(j).setChildflag(!list.get(j).getChildflag());
                    }
                }
                myAdapter.notifyDataSetChanged();
                PreSenterImpl preSenter=new PreSenterImpl();
                preSenter.countAll(new ModelImpl(),CartActivity.this,cartBean);
            }
        });
    }
        //显示数据
    @Override
    public void showDataToCart(Context context, CartBean cartBean) {
        this.cartBean=cartBean;
        myAdapter = new MyAdapter(context,cartBean,this);
        exp.setAdapter(myAdapter);
        //展开所有的列表
       int childCount = myAdapter.getGroupCount();
        for (int i = 0; i < childCount; i++) {
            exp.expandGroup(i);
        }
    }

    @Override
    public void showNum(double num) {
        priceAll.setText("总价:"+num);
    }

    @Override
    public CartBean getCartBean() {
        return cartBean;
    }
}
------------------------------------------------------------------------------
public interface IMainView {
    void showDetailData(DetailBean bean);
    void addToCart();
    String getPid();
    void showAddSuccsee(String json);
    void showAddError(String error);
}
--------------------------------------------------------
public class MainActivity extends AppCompatActivity implements IMainView{

    private ImageView img;
    private TextView name;
    private TextView price;
    private TextView price_to;
    private TextView add;
    private TextView cart;
    private PreSenterImpl preSenter;
    private DetailBean bean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        preSenter = new PreSenterImpl();
        preSenter.showDetailToData(new ModelImpl(),this);
    }

    private void initView() {
        img = (ImageView) findViewById(R.id.main_img);
        name = (TextView) findViewById(R.id.main_name);
        price = (TextView) findViewById(R.id.main_price);
        price_to = (TextView) findViewById(R.id.main_priceto);
        add = (TextView) findViewById(R.id.main_add);
        cart = (TextView) findViewById(R.id.main_cart);
        cart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,CartActivity.class));
                overridePendingTransition(R.anim.enter,R.anim.out);
                finish();
            }
        });
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                preSenter.addToCart(new ModelImpl(), MainActivity.this);
            }
        });
    }

    private static final String TAG = "MainActivity";
    @Override
    public void showDetailData(DetailBean bean) {
        this.bean=bean;
        Log.d(TAG, "---shuju====" + bean);
        String images = bean.getData().getImages();
        String image = images.split(".jpg")[0] + ".jpg";
        Glide.with(MainActivity.this).load(image).into(img);
        name.setText(bean.getData().getTitle());
        price.setText("原价:"+bean.getData().getPrice());
        price_to.setText("折扣价"+bean.getData().getBargainPrice());
    }

    @Override
    public void addToCart() {

    }

    @Override
    public String getPid() {
        return bean.getData().getPid()+"";
    }

    @Override
    public void showAddSuccsee(String json) {

    }

    @Override
    public void showAddError(String error) {

    }
}
--------------------------------------------------------------------
public class MyAdapter extends BaseExpandableListAdapter{
    private final Context context;
    private final CartBean cartBean;
    private final ICartView iCartView;
    private final List<CartBean.DataBean> list;
    private GroupViewHolder holder;
    private ChildViewHolder holder1;

    public MyAdapter(Context context, CartBean cartBean, ICartView iCartView) {
    this.context=context;
    this.cartBean=cartBean;
    this.iCartView=iCartView;
    this.list=cartBean.getData();
    }

    @Override
    public int getGroupCount() {
        return list.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return list.get(groupPosition).getList().size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return list.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return list.get(groupPosition).getList().get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if(convertView==null){
            convertView = View.inflate(context, R.layout.groupitem, null);
            CheckBox group_box = convertView.findViewById(R.id.group_box);
            TextView group_name = convertView.findViewById(R.id.group_name);
            holder = new GroupViewHolder(group_box,group_name);
            convertView.setTag(holder);
        }else{
             holder = (GroupViewHolder) convertView.getTag();
        }
        holder.getGroup_box().setChecked(list.get(groupPosition).getGroupflag());
        holder.getGroup_name().setText(list.get(groupPosition).getSellerName());
        holder.getGroup_box().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isCleked = list.get(groupPosition).getGroupflag();
                isCleked=!isCleked;
                list.get(groupPosition).setGroupflag(isCleked);
                List<CartBean.DataBean.ListBean> beans = MyAdapter.this.list.get(groupPosition).getList();
                for (int i = 0; i < beans.size() ; i++) {
                    beans.get(i).setChildflag(isCleked);
                }
                notifyDataSetChanged();
                PreSenterImpl preSenter=new PreSenterImpl();
                preSenter.countAll(new ModelImpl(),iCartView,cartBean);
            }
        });
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
       if (convertView==null){
           convertView = View.inflate(context, R.layout.childitem, null);
           CheckBox child_box = convertView.findViewById(R.id.child_box);
           ImageView child_img = convertView.findViewById(R.id.child_img);
           TextView child_subhead = convertView.findViewById(R.id.child_subhead);
           TextView child_price = convertView.findViewById(R.id.child_price);
           holder1 = new ChildViewHolder(child_box,child_img,child_subhead,child_price);
           convertView.setTag(holder1);
       }else{
            holder1 = (ChildViewHolder) convertView.getTag();
       }
       holder1.getChild_box().setChecked(list.get(groupPosition).getList().get(childPosition).getChildflag());
        String images = list.get(groupPosition).getList().get(childPosition).getImages();
        String image = images.split(".jpg")[0] + ".jpg";
        Log.d("图片", image);
        Glide.with(context).load(image).into(holder1.getChild_img());
       holder1.getChild_subhead().setText(list.get(groupPosition).getList().get(childPosition).getSubhead());
       holder1.getChild_price().setText(list.get(groupPosition).getList().get(childPosition).getPrice()+"");

        holder1.getChild_box().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isCleked = list.get(groupPosition).getList().get(childPosition).getChildflag();
                isCleked=!isCleked;
                list.get(groupPosition).getList().get(childPosition).setChildflag(isCleked);
                List<CartBean.DataBean.ListBean> beans = MyAdapter.this.list.get(groupPosition).getList();
                boolean flag=true;
                for (int i = 0; i < beans.size() ; i++) {
                    if (!beans.get(i).getChildflag()) {
                        flag=false;
                    }
                }
                list.get(groupPosition).setGroupflag(flag);
                notifyDataSetChanged();
                PreSenterImpl preSenter=new PreSenterImpl();
                preSenter.countAll(new ModelImpl(),iCartView,cartBean);
            }
        });
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
    class GroupViewHolder{
        private CheckBox group_box;
        private TextView group_name;

        public GroupViewHolder(CheckBox group_box, TextView group_name) {
            this.group_box = group_box;
            this.group_name = group_name;
        }

        public CheckBox getGroup_box() {
            return group_box;
        }

        public void setGroup_box(CheckBox group_box) {
            this.group_box = group_box;
        }

        public TextView getGroup_name() {
            return group_name;
        }

        public void setGroup_name(TextView group_name) {
            this.group_name = group_name;
        }
    }
    class ChildViewHolder{
       private CheckBox child_box;
        private ImageView child_img;
        private TextView child_subhead;
        private TextView child_price;

        public ChildViewHolder(CheckBox child_box, ImageView child_img, TextView child_subhead, TextView child_price) {
            this.child_box = child_box;
            this.child_img = child_img;
            this.child_subhead = child_subhead;
            this.child_price = child_price;
        }

        public CheckBox getChild_box() {
            return child_box;
        }

        public void setChild_box(CheckBox child_box) {
            this.child_box = child_box;
        }

        public ImageView getChild_img() {
            return child_img;
        }

        public void setChild_img(ImageView child_img) {
            this.child_img = child_img;
        }

        public TextView getChild_subhead() {
            return child_subhead;
        }

        public void setChild_subhead(TextView child_subhead) {
            this.child_subhead = child_subhead;
        }

        public TextView getChild_price() {
            return child_price;
        }

        public void setChild_price(TextView child_price) {
            this.child_price = child_price;
        }
    }
}
===================================================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值