//配置清单文件<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); }----------------------------------------------------------------------//View层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); } }----------------------------------------------------------------------------------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; } } }===================================================
Android购物车
最新推荐文章于 2022-10-15 16:46:29 发布