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  > 
------------- ------------------------------------------
//依赖
编译'com.squareup.okhttp3:okhttp:3.3.0'
编译'com.google.code.gson:GSON:2.2.4'
编译'com.squareup.okio:奥基奥:1.5.0'
编译“com.github。 bumptech.glide:滑行:3.6.1'
-------------------------------------------------- --- \
utils的层
公共类 HttpConfig {
     公共静态字符串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” ;
}
-------------------------------------------------- -----
公共类 OkHttpUtils {
        私有静态 OkHttpUtils okHttpUtils = null ;
          私人 MyHandler myHandler = 新的 MyHandler();
          私人 OkLoadListener okLoadListener ;

          //单例
 public static OkHttpUtils getInstance(){
              ifokHttpUtils == null){
                 okHttpUtils = new OkHttpUtils();          
             }
             返回okHttpUtils ;
          }

          / /获取
 公共无效 OKGet(字符串网址){          
             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();
                   信息。什么 = 0 ;
                   信息。obj = e.getMessage();
                   myHandler .sendMessage(message);
                }

                @覆盖
 公共无效 onResponse(电话呼叫,应答响应)抛出 IOException异常{                
                   Message message = myHandler .obtainMessage();
                   信息。什么 = 1 ;
                   信息。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();
             //遍历映射
              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();
                   信息。什么 = 0 ;
                   信息。obj = e.getMessage();
                   myHandler .sendMessage(message);
                }

                @覆盖
 公共无效 onResponse(电话呼叫,应答响应)抛出 IOException异常{                
                   Message message = myHandler .obtainMessage();
                   信息。什么 = 1 ;
                   信息。obj = response.body()。string();
                   myHandler .sendMessage(message);
                }
             });
          }

          //拦截器
  MyInter 实现了 Interceptor {
              private static final String TAG = “MyInter” ;
             @Override
 public response intercept(Chain chain)throws IOException {
                 //获取原来的主体
 Request request = chain.request();                                       
                RequestBody body = request.body();
                if(body instanceof FormBody){
                    //遍历原来的所有参数,加到新的Body里面,最后将公共参数加到新的Body
                    FormBody.Builder newBuilder = new FormBody.Builder();
                   forint 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();
                   //创建新的请求
                   请求newRequest = request.newBuilder()。post(newBody).build();
                   响应响应= chain.proceed(newRequest);
                   回复回复;
                }

                返回null ;
             }
          }

          //处理程序
  MyHandler的延伸处理程序{
              @覆盖
 公共无效的handleMessage(消息MSG){
                 开关(MSG。什么){
                    情况下0//失败
串E =(字符串)味精。obj ;
                      okLoadListener .okLoadError(e);
                      打破 ;
                   情况1//成功
字符串json =(字符串)味精。obj ;
                      okLoadListener                                                                   .okLoadSuccess(JSON);
                      打破 ;
                }
             }
          }

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


-------------------------------------------------- -----
模型层
公共接口 AddCartListener {
//添加成功
  void addCartSuccecc(String json);
//添加失败
 void addCartError(String json);
}
-------------------------------------------------- -------
公共接口 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);                
}
* ------------------------------------------------- -----
公共类 ModelImpl 实现 Imodel {
     @覆盖
 公共无效 getDetailData(字符串URL,地图<字符串,字符串>地图,最终 DetailLoadListener detailLoadListener){    
        OkHttpUtils实例= OkHttpUtils。getInstance();
        instance.okPost(URL,地图);
        instance.setOkLoadListener( OkLoadListener(){
             @覆盖
 公共无效 okLoadSuccess(字符串JSON){
                 //Log.d( “请求数据”,JSON);
 detailLoadListener .detailLoadSuccess(JSON);                            
            }

            @覆盖
 公共无效 okLoadError(字符串错误){
                 detailLoadListener .detailLoadError(误差);            
            }
        });

    }

    @Override
 public void addToCart(String url,Map <String,String> map,final AddCartListener addCartListener){    
        OkHttpUtils实例= OkHttpUtils。getInstance();
        instance.okPost(URL,地图);
        实例.setOkLoadListener 新的 OkLoadListener(){
             @
 Override 公共无效 okLoadSuccess(字符串JSON){
                 addCartListener .addCartSuccecc(JSON);            
            }

            @覆盖
 公共无效 okLoadError(字符串错误){
                 addCartListener .addCartError(误差);            
            }
        });
    }

    @Override
 public void showDataToCart(String url,Map <String,String> map,final CartListLoadListener cartListLoadListener){    
        OkHttpUtils实例= OkHttpUtils。getInstance();
        instance.okPost(URL,地图);
        实例.setOkLoadListener 新的 OkLoadListener(){
             @
 Override 公共无效 okLoadSuccess(字符串JSON){
                 cartListLoadListener .cartLoadSuccess(JSON);            
            }

            @覆盖
 公共无效 okLoadError(字符串错误){
                 cartListLoadListener .cartLoadError(误差);            
            }
        });
    }

    @覆盖
 公共双 countAll(CartBean cartBean){
         INT NUM = 0 ;    
        List <CartBean.DataBean> data = cartBean.getData();
        forint i = 0 ; i <data.size(); i ++){
            List <CartBean.DataBean.ListBean> list = data.get(i).getList();
            forint j = 0 ; j <list.size(); j ++){
                 if(list.get(j).getChildflag()){
                     double gbp = list.get(j).getPrice();
                    NUM + = GBP;
                }
            }
        }
        返回数字;
    }
}
-------------------------------------------------- --------------------
Prosenter层 
公共接口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,地图, DetailLoadListener(){
             @覆盖
 公共无效 detailLoadSuccess(JSON字符串){            
                日志。d“请求数据----”,json);
                Gson gson = new Gson();
                DetailBean豆= gson.fromJson(JSON,DetailBean。);
                iMainView .showDetailData(bean);
            }
            @覆盖
 公共无效 detailLoadError(字符串JSON){            
                日志。dTAG“失败”);
            }
        });
    }

    @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,地图, AddCartListener(){
             @覆盖
 公共无效 addCartSuccecc(JSON字符串){
                 尝试 {            
                    JSONObject obj = new JSONObject(json);
                    String code = obj.getString(“code”);
                    if(code.equals(“0”)){
                         iMainView .showAddSuccsee(json);
                        日志。dTAG“添加数据成功”);
                    } 其他 {
                         iMainView .showAddError(json);
                        日志。dTAG“添加数据失败”);
                    }
                } 捕获(JSONException E){
                    e.printStackTrace();
                }
            }
            @覆盖
 公共无效 addCartError(字符串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,地图, CartListLoadListener(){
             @覆盖
 公共无效 cartLoadSuccess(JSON字符串){            
                Gson gson = new Gson();
                CartBean购物= gson.fromJson(JSON,CartBean。);
                日志。d“显示数据”,cart.toString());
                iCartView .showDataToCart(context,cart);
            }

            @覆盖
 公共无效 cartLoadError(字符串错误){            

            }
        });
    }

    @覆盖
 公共无效 countAll(Imodel imodel,ICartView iCartView,CartBean cartBean){
         所有= imodel.countAll(cartBean);    
        日志。d“总价格”,all + “”);
            iCartView.showNum(全部);
    }

}
-------------------------------------------------- -------------------------------- 
//查看层
public class AnimatorUtils {
     public static AnimatorSet setAnimatorSet(Context context,View view){
         //获取屏幕宽度的一半属性动画
 int pixels = context.getResources()。getDisplayMetrics()。高度像素 ;        
        ObjectAnimator翻译Y = ObjectAnimator。ofFloat(view,“translationY”0,pixels / 2);
        ObjectAnimator scaleX = ObjectAnimator。ofFloat(view,“scaleX”2.0f1.0f);
        ObjectAnimator scaleY = ObjectAnimator。ofFloat(view,“scaleY”2.0f1.0f);
        ObjectAnimator alpha = ObjectAnimator。ofFloat(视图,“阿尔法”01.0F);
        ObjectAnimator旋转= ObjectAnimator。ofFloat(视图,“旋转”0360);
        AnimatorSet set = new AnimatorSet();
        set.playTogether(translationY,将scaleX,的scaleY,α,旋转);
        set.setDuration(3000);
        set.start();
        回报集;
    }
}
-------------------------------------------------- -----------------------------------------
公共类 SplashActivity 扩展 AppCompatActivity {

    私人 ImageView img ;

    @Override
 保护无效的 onCreate(Bundle savedInstanceState){
         超级 .onCreate(savedInstanceState);    
        的setContentView(R.layout activity_splash);
        initViews();

    }
    private void initViews(){
         img =(ImageView)findViewById(R.id。splash_img);
        AnimatorSet set = AnimatorUtils。setAnimatorSet(SplashActivity。IMG);
        set.addListener(new AnimatorListenerAdapter(){
             @
 Override public void onAnimationEnd(Animator animation){
                 super .onAnimationEnd(animation);            
            startActivity(新的意向书(SplashActivity。,MainActivity。));
            //加跳转动画
                 overridePendingTransition(R.anim。输入,R.anim。出来);
                //结束本页面
                光洁度();
            }
        });
    }
}
-------------------------------------------------- --------------------------------------------
公共接口 ICartView {
     void showDataToCart(Context context,CartBean cartBean);
    void showNum(double num);
    CartBean getCartBean();
}

-------------------------------------------------- -----------------------------------------
公共类 CartActivity 扩展 AppCompatActivity 实现 ICartView {

    private ExpandableListView exp ;
    私人 CheckBox  ;
    私人 TextView priceAll ;
    私人 CartBean cartBean ;
    私人 MyAdapter myAdapter ;

    @Override
 保护无效的 onCreate(Bundle savedInstanceState){
         超级 .onCreate(savedInstanceState);    
        的setContentView(R.layout activity_cart);
        initViews();
        PreSenterImpl preSenter = new PreSenterImpl();
        preSenter.showDataToCart(thisnew 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();
                forint i = 0 ; i <data.size(); i ++){
                    data.get(I).setGroupflag(data.get(I).getGroupflag()!);
                    List <CartBean.DataBean.ListBean> list = data.get(i).getList();
                    forint j = 0 ; j <list.size(); j ++){
                        list.get(J).setChildflag(list.get(J).getChildflag()!);
                    }
                }
                myAdapter .notifyDataSetChanged();
                PreSenterImpl preSenter = new PreSenterImpl();
                preSenter.countAll( ModelImpl(),CartActivity。cartBean);
            }
        });
    }
        //显示数据
 @Override
 public void showDataToCart(Context context,CartBean cartBean){
         thiscartBean = cartBean;
        myAdapter = new MyAdapter(context,cartBean,this);
        exp .setAdapter(myAdapter);
        //展开所有的列表
 int childCount = myAdapter .getGroupCount();
        forint i = 0 ; i <childCount; i ++){
             exp .expandGroup(i);               
        }
    }

    @覆盖
 公共无效 showNum( NUM){
         priceAll .setText( 总价:” + NUM);    
    }

    @覆盖
 公共 CartBean getCartBean(){
         返回cartBean ;    
    }
}
-------------------------------------------------- ----------------------------
公共接口 IMainView {
     无效 showDetailData(DetailBean豆);
    void addToCart();
    String getPid();
    void showAddSuccsee(String json);
    void showAddError(String error);
}
-------------------------------------------------- ------
公共类 MainActivity 扩展 AppCompatActivity 实现 IMainView {

    私人 ImageView img ;
    私人 TextView 名称 ;
    私人 TextView 价格 ;
    私人 TextView price_to ;
    私人 TextView 添加 ;
    私人 TextView 购物车 ;
    私人 PreSenterImpl preSenter ;
    私人 DetailBean  ;

    @Override
 保护无效的 onCreate(Bundle savedInstanceState){
         超级 .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(新的意向书(MainActivity。,CartActivity。));
                overridePendingTransition(R.anim 输入,R.anim。出来);
                完();
            }
        });
        添加 .setOnClickListener( View.OnClickListener(){
             @覆盖
 公共无效的onClick(视图v){
                 主持人 .addToCart( ModelImpl(),MainActivity。);            
            }
        });
    }

    private static final String TAG = “MainActivity” ;
    @Override
 public void showDetailData(DetailBean bean){
         thisbean = bean;    
        日志。dTAG“--- shuju ====” + bean);
        String images = bean.getData()。getImages();
        String image = images.split(“.jpg”)[ 0 ] + “.jpg” ;
        滑行。(MainActivity。).load(图像).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()+ “” ;    
    }

    @覆盖
 公共无效 showAddSuccsee(字符串JSON){    

    }

    @覆盖
 公共无效 showAddError(字符串错误){    

    }
}
-------------------------------------------------- ------------------
公共类 MyAdapter 扩展 BaseExpandableListAdapter {
     private final上下文上下文 ;
    私人终极 CartBean cartBean ;
    私人最终 ICartView iCartView ;
    私人最终列表<CartBean.DataBean> 列表 ;
    私人 GroupViewHolder 持有人 ;
    私人 ChildViewHolder holder1 ;

    公共 MyAdapter(上下文上下文,CartBean cartBean,ICartView iCartView){
     thiscontext = context;
    这个cartBean = cartBean;
    这个iCartView = iCartView;
    这个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;    
    }

    @覆盖
 公共布尔 hasStableIds(){
         返回false ;    
    }

    @Override
 public View getGroupView(final int groupPosition,boolean isExpanded,View convertView,ViewGroup parent){
         if(convertView == null){    
            convertView = View。膨胀上下文。,R.layout groupitem);
            CheckBox group_box = convertView.findViewById(R.id。group_box);
            TextView的组名= convertView.findViewById(R.id GROUP_NAME);
            holder = new GroupViewHolder(group_box,group_name);
            convertView.setTag(持有者);
        } else {
              holder =(GroupViewHolder)convertView.getTag();
        }
        持有者 .getGroup_box()。setChecked(list .get(groupPosition).getGroupflag());
        持有者 .getGroup_name()。setText(list .get(groupPosition).getSellerName());
        保持器。.getGroup_box()setOnClickListener( View.OnClickListener(){
             @覆盖
 公共无效的onClick(视图v){
                 布尔 isCleked = 列表获得(groupPosition).getGroupflag();            
                isCleked = isCleked!;
                list .get(groupPosition).setGroupflag(isCleked);
                List <CartBean.DataBean.ListBean> beans = MyAdapter。这个list .get(groupPosition).getList();
                forint i = 0 ; i <beans.size(); i ++){
                    beans.get(ⅰ).setChildflag(isCleked);
                }
                notifyDataSetChanged();
                PreSenterImpl preSenter = new PreSenterImpl();
                preSenter.countAll(new ModelImpl(),iCartViewcartBean);
            }
        });
        返回 convertView;
    }

    @Override
 public View getChildView(final int groupPosition,final int childPosition,boolean isLastChild,View convertView,ViewGroup parent){
        if(convertView == null){    
           convertView = View。膨胀上下文。,R.layout childitem);
           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 = 新的 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” ;
        日志。d“图片”,图片);
        滑行。上下文).load(图像).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。这个list .get(groupPosition).getList();
                布尔标志=  ;
                forint 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(),iCartViewcartBean);
            }
        });
        返回 convertView;
    }

    @覆盖
 公共布尔 isChildSelectable(INT groupPosition,INT childPosition){
         返回false ;    
    }
    class GroupViewHolder {
         private CheckBox group_box ;
        私人 TextView 组名 ;

        public GroupViewHolder(CheckBox group_box,TextView group_name){
             thisgroup_box = group_box;
            这个group_name = group_name;
        }

        public CheckBox getGroup_box(){
             return group_box ;
        }

        public void setGroup_box(CheckBox group_box){
             thisgroup_box = group_box;
        }

        public TextView getGroup_name(){
             return group_name ;
        }

        public void setGroup_name(TextView group_name){
             thisgroup_name = group_name;
        }
    }
    class ChildViewHolder {
        private CheckBox child_box ;
        私人 ImageView child_img ;
        私人 TextView的child_subhead ;
        私人 TextView的child_price ;

        public ChildViewHolder(CheckBox child_box,ImageView child_img,TextView child_subhead,TextView child_price){
             thischild_box = child_box;
            这个child_img = child_img;
            这个child_subhead = child_subhead;
            这个child_price = child_price;
        }

        public CheckBox getChild_box(){
             return child_box ;
        }

        public void setChild_box(CheckBox child_box){
             thischild_box = child_box;
        }

        public ImageView getChild_img(){
             return child_img ;
        }

        public void setChild_img(ImageView child_img){
             thischild_img = child_img;
        }

        public TextView getChild_subhead(){
             return child_subhead ;
        }

        public void setChild_subhead(TextView child_subhead){
             thischild_subhead = child_subhead;
        }

        public TextView getChild_price(){
             return child_price ;
        }

        public void setChild_price(TextView child_price){
             thischild_price = child_price;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35230695/article/details/79127305
今日推荐