购物车+上传头像①

导入依赖

com.github.bumptech.glide:glide:4.7.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
    //okhttp
    compile 'com.squareup.okhttp3:okhttp:3.6.0'
    compile 'com.squareup.okio:okio:1.11.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
    //gson
    compile 'com.google.code.gson:gson:2.8.2'
    compile 'com.jcodecraeer:xrecyclerview:1.3.2'

    implementation 'com.android.support:design:27.1.1'

Model

GetCartModel

package com.example.a1512qweek4.model;


import com.example.a1512qweek4.net.OnNetListener;


public interface GetCartsModel {
    void getCarts(String uid, String token, OnNetListener onNetListener);

}

---------------------------------------------------------------------------------------------------------------

GetCartModelImp

package com.example.a1512qweek4.model;


import com.example.a1512qweek4.net.Api;
import com.example.a1512qweek4.net.OkhttpUtils;
import com.example.a1512qweek4.net.OnNetListener;


import java.util.HashMap;
import java.util.Map;


public class GetCartsModelImp implements GetCartsModel {
    @Override
    public void getCarts(String uid, String token, final OnNetListener onNetListener) {
        Map<String, String> params = new HashMap<>();
        params.put("uid", uid);
        params.put("token", token);
        OkhttpUtils.getInstance().doPost(Api.GETCARTS_URL, params, new OnNetListener() {
            @Override
            public void onSuccess(String result) {
                onNetListener.onSuccess(result);
            }


            @Override
            public void onFailed(Exception e) {
                onNetListener.onFailed(e);
            }
        });
    }

}

-------------------------------------------------------------------------------------------------------------------------------

UpdateCartModel

package com.example.a1512qweek4.model;


import com.example.a1512qweek4.net.OnNetListener;


public interface UpdateCartsModel {
    void updateCarts(String uid, String sellerid, String pid, String num, String selected, String token,
                     OnNetListener onNetListener);

}

-----------------------------------------------------------------------------------------------------------------------------

UpdateCartModelImp

package com.example.a1512qweek4.model;


import com.example.a1512qweek4.net.Api;
import com.example.a1512qweek4.net.OkhttpUtils;
import com.example.a1512qweek4.net.OnNetListener;


import java.util.HashMap;
import java.util.Map;


public class UpdateCartsModelImp implements UpdateCartsModel{
    @Override
    public void updateCarts(String uid, String sellerid, String pid, String num, String selected, String token, final OnNetListener onNetListener) {


        Map<String,String> params = new HashMap<>();
        params.put("uid",uid);
        params.put("sellerid",sellerid);
        params.put("pid",pid);
        params.put("num",num);
        params.put("selected",selected);
        params.put("token",token);
        OkhttpUtils.getInstance().doPost(Api.UPDATECARTS_URL, params, new OnNetListener() {
            @Override
            public void onSuccess(String result) {
                onNetListener.onSuccess(result);
            }


            @Override
            public void onFailed(Exception e) {
                onNetListener.onFailed(e);
            }
        });
    }

}

---------------------------------------------------------------------------------------------------------------------------------

Presenter

GetCartPresenter

package com.example.a1512qweek4.presenter;


public interface GetCartsPresenter {
    void getCarts(String uid, String token);
}

---------------------------------------------------------------------------------------------------------------------------------

GetCartPresenterImp

package com.example.a1512qweek4.presenter;


import com.example.a1512qweek4.bean.GetCartsBean;
import com.example.a1512qweek4.bean.SellerBean;
import com.example.a1512qweek4.model.GetCartsModelImp;
import com.example.a1512qweek4.net.OnNetListener;
import com.example.a1512qweek4.view.GetCartsView;
import com.google.gson.Gson;


import java.util.ArrayList;
import java.util.List;


public class GetCartsPresenterImp implements GetCartsPresenter {


    private final GetCartsModelImp getCartsModelImp;
    private GetCartsView getCartsView;


    public GetCartsPresenterImp(GetCartsView getCartsView) {
        this.getCartsView = getCartsView;
        getCartsModelImp = new GetCartsModelImp();
    }


    public void detach() {
        if (getCartsView != null) {
            getCartsView = null;
        }
    }


    @Override
    public void getCarts(String uid, String token) {
        getCartsModelImp.getCarts(uid, token, new OnNetListener() {
            @Override
            public void onSuccess(String result) {
                //给View层显示
                if (getCartsView != null) {
                    List<SellerBean> groupList = new ArrayList<>();
                    List<List<GetCartsBean.DataBean.ListBean>> childList = new ArrayList<>();
                    //解析服务器返回的数据
                    GetCartsBean getCartsBean = new Gson().fromJson(result, GetCartsBean.class);
                    //需要对返回的数据进行二次封装,以满足二级列表显示的需要
                    List<GetCartsBean.DataBean> data = getCartsBean.getData();
                    for (int i = 0; i < data.size(); i++) {
                        GetCartsBean.DataBean dataBean = data.get(i);
                        //封装二级列表数据
                        List<GetCartsBean.DataBean.ListBean> list = dataBean.getList();
                        childList.add(list);
                        //封装一级列表数据
                        SellerBean sellerBean = new SellerBean();
                        sellerBean.setSellName(dataBean.getSellerName());
                        sellerBean.setSellId(dataBean.getSellerid());
                        sellerBean.setChecked(isSellerChecked(list));
                        groupList.add(sellerBean);
                    }
                    getCartsView.show(groupList, childList);
                }
            }


            @Override
            public void onFailed(Exception e) {


            }
        });
    }




    private boolean isSellerChecked(List<GetCartsBean.DataBean.ListBean> list) {
        for (int i = 0; i < list.size(); i++) {
            GetCartsBean.DataBean.ListBean listBean = list.get(i);
            if (listBean.getSelected() == 0) {
                return false;
            }
        }
        return true;
    }

}

---------------------------------------------------------------------------------------------------------------------------------

UpdateCartPresenter

package com.example.a1512qweek4.presenter;


public interface UpdateCartsPresenter {
    void updateCarts(String uid, String sellerid, String pid, String num, String selected, String token);

}

---------------------------------------------------------------------------------------------------------------------------------

UpdateCartPresenterImp

package com.example.a1512qweek4.presenter;


import com.example.a1512qweek4.model.UpdateCartsModelImp;
import com.example.a1512qweek4.net.OnNetListener;
import com.example.a1512qweek4.view.UpdataCartsView;


public class UpdateCartsPresenterImp implements UpdateCartsPresenter {


    private final UpdateCartsModelImp updateCartsModelImp;
    private UpdataCartsView updataCartsView;


    public UpdateCartsPresenterImp(UpdataCartsView updataCartsView) {
        this.updataCartsView = updataCartsView;
        updateCartsModelImp = new UpdateCartsModelImp();
    }


    @Override
    public void updateCarts(String uid, String sellerid, String pid, String num, String selected, String token) {
        updateCartsModelImp.updateCarts(uid, sellerid, pid, num, selected, token, new OnNetListener() {
            @Override
            public void onSuccess(String result) {
                if (updataCartsView != null) {
                    updataCartsView.updateSucess();
                }
            }


            @Override
            public void onFailed(Exception e) {


            }
        });
    }

}

----------------------------------------------------------------------------------------------------------------------------

View

GetCartView

package com.example.a1512qweek4.view;


import com.example.a1512qweek4.bean.GetCartsBean;
import com.example.a1512qweek4.bean.SellerBean;


import java.util.List;


public interface GetCartsView {
    void show(List<SellerBean> groupList, List<List<GetCartsBean.DataBean.ListBean>> childList);
}

-------------------------------------------------------------------------------------------------------------------------------

UpdateCartView

package com.example.a1512qweek4.view;


public interface UpdataCartsView {
    void updateSucess();

}

-------------------------------------------------------------------------------------------------------------------------------

net

Api

package com.example.a1512qweek4.net;


public interface Api {
    String GETCARTS_URL = "https://www.zhaoapi.cn/product/getCarts";
    String LOGIN_URL = "https://www.zhaoapi.cn/user/login?mobile=18310830365&password=123456";
    String UPDATECARTS_URL = "https://www.zhaoapi.cn/product/updateCarts";
    String UPLOADHEADER = "https://www.zhaoapi.cn/file/upload";

}

----------------------------------------------------------------------------------------------------------------------------

MyIntercerport

package com.example.a1512qweek4.net;


import java.io.IOException;


import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;


/**
 * 自定义拦截器封装公共参数
 */
public class MyInterceptor implements Interceptor {


    private Response response;


    @Override
    public Response intercept(Chain chain) throws IOException {
        //获取原始的Request请求
        Request originalRequest = chain.request();
        //判断是GET请求还是POST请求
        String method = originalRequest.method();
        if ("GET".equals(method)) {
//            String orginalUrl = originalRequest.url().toString();
//            String url = orginalUrl+"&source=android";
            HttpUrl httpUrl = originalRequest.url()
                    .newBuilder()
                    .addQueryParameter("source", "android")
                    .build();
            Request request = new Request.Builder()
                    .url(httpUrl)
                    .build();
            //发送拼接完成后的请求
            response = chain.proceed(request);


        } else {
            RequestBody requestBody = originalRequest.body();
            if (requestBody instanceof FormBody) {
                FormBody.Builder builder = new FormBody.Builder();
                FormBody originalformBody = (FormBody) originalRequest.body();
                for (int i = 0; i < originalformBody.size(); i++) {
                    builder.add(originalformBody.name(i), originalformBody.value(i));
                }
                builder.add("source", "android");
                FormBody formBody = builder.build();
                Request request = originalRequest.newBuilder().post(formBody).build();
                response = chain.proceed(request);
            } else {
                //发送请求
                response = chain.proceed(originalRequest);
            }
        }
        return response;
    }

}

---------------------------------------------------------------------------------------------------------------------------------

OkhttpUtils

package com.example.a1512qweek4.net;


import android.os.Handler;
import android.os.Looper;


import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;


public class OkhttpUtils {
    private static OkhttpUtils instance;
    private final OkHttpClient okHttpClient;
    private final Handler handler;


    private OkhttpUtils() {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(15, TimeUnit.SECONDS)//连接超时
                .writeTimeout(20, TimeUnit.SECONDS)//写入超时
                .readTimeout(20, TimeUnit.SECONDS)//读取超时
                .addInterceptor(new MyInterceptor())
                .addInterceptor(logging)
                .build();
        handler = new Handler(Looper.getMainLooper());
    }


    public static OkhttpUtils getInstance() {
        if (instance == null) {
            instance = new OkhttpUtils();
        }
        return instance;
    }


    /**
     * GET请求
     *
     * @param url
     */
    public void doGet(String url, final OnNetListener onNetListener) {
        //创建Request
        final Request request = new Request.Builder()
                .url(url)
                .build();
        //发送请求
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onFailed(e);
                    }
                });
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //拿到服务器返回的数据
                final String string = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onSuccess(string);
                    }
                });
            }
        });
    }


    /**
     * POST请求
     *
     * @param url
     * @param params
     * @param onNetListener
     */
    public void doPost(String url, Map<String, String> params, final OnNetListener onNetListener) {


        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            builder.add(entry.getKey(), entry.getValue());
        }
        //创建FormBody
        FormBody formBody = builder.build();


        //创建Request
        Request request = new Request.Builder()
                .url(url)
                .post(formBody)
                .build();
        //请求数据
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onFailed(e);
                    }
                });
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //拿到服务器返回的数据
                final String string = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onSuccess(string);
                    }
                });
            }
        });
    }




    public void uploadFile(String url, Map<String, String> params, String fileName, File file, final OnNetListener
            onNetListener) {
        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);
        //上传参数
        for (Map.Entry<String, String> entry : params.entrySet()) {
            builder.addFormDataPart(entry.getKey(), entry.getValue());
        }
        builder.addFormDataPart("file", fileName, RequestBody.create(MediaType.parse("application/octet-stream"),
                file));
        MultipartBody multipartBody = builder.build();


        final Request request = new Request.Builder()
                .url(url)
                .post(multipartBody)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onFailed(e);
                    }
                });
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onSuccess(string);
                    }
                });
            }
        });
    }

}

-------------------------------------------------------------------------------------------------------------------------------

OnNetListener

package com.example.a1512qweek4.net;


public interface OnNetListener {
    void onSuccess(String result);


    void onFailed(Exception e);

}

--------------------------------------------------------------------------------------------------------------------------------

AddSubView

package com.example.a1512qweek4;


import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;


public class AddSubView extends LinearLayout {


    private TextView tvSub;
    private TextView tvNum;
    private TextView tvAdd;


    public AddSubView(Context context) {
        this(context, null);
    }


    public AddSubView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        //初始化布局
        LayoutInflater.from(context).inflate(R.layout.addsubview, this);
        tvSub = findViewById(R.id.tvSub);
        tvNum = findViewById(R.id.tvNum);
        tvAdd = findViewById(R.id.tvAdd);
    }


    public void setNum(String num) {
        tvNum.setText(num);
    }


    public String getNum() {
        return tvNum.getText().toString();
    }


    public void setOnSubClickListener(OnClickListener onClickListener){
        tvSub.setOnClickListener(onClickListener);
    }


    public void setOnAddClickListener(OnClickListener onClickListener){
        tvAdd.setOnClickListener(onClickListener);
    }


}

------------------------------------------------------------------------------------------------------------------------------

ElvAdapter

package com.example.a1512qweek4;


import android.content.Context;
import android.content.SharedPreferences;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


import com.bumptech.glide.Glide;
import com.example.a1512qweek4.bean.GetCartsBean;
import com.example.a1512qweek4.bean.SellerBean;
import com.example.a1512qweek4.presenter.GetCartsPresenterImp;
import com.example.a1512qweek4.presenter.UpdateCartsPresenterImp;
import com.example.a1512qweek4.view.UpdataCartsView;


import java.util.List;


public class ElvAdapter extends BaseExpandableListAdapter implements UpdataCartsView {


    private final String uid;
    private final String token;
    private Context context;
    private LayoutInflater inflater;
    private List<SellerBean> groupList;
    private List<List<GetCartsBean.DataBean.ListBean>> childList;
    private final UpdateCartsPresenterImp updateCartsPresenterImp;
    private GetCartsPresenterImp getCartsPresenterImp;
    private int childIndex;
    private boolean isSellerChecked;//商家是否选中
    private int groupIndex;//表示当前点击的是哪个商家
    private static final int GET_CARTS = 0;
    private static final int UPDATE_CART = 1;
    private static final int UPDATE_SELLER = 2;
    public static int state;


    public ElvAdapter(Context context, List<SellerBean> groupList, List<List<GetCartsBean.DataBean.ListBean>>
            childList, GetCartsPresenterImp getCartsPresenterImp) {
        this.context = context;
        this.groupList = groupList;
        this.childList = childList;
        this.getCartsPresenterImp = getCartsPresenterImp;
        inflater = LayoutInflater.from(context);


        //绑定
        updateCartsPresenterImp = new UpdateCartsPresenterImp(this);
        //从SharedPreferences获取登录时保存的uid和token值
        SharedPreferences sharedPreferences = context.getSharedPreferences("user", Context.MODE_PRIVATE);
        uid = sharedPreferences.getString("uid", "");
        token = sharedPreferences.getString("token", "");




    }


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


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


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


    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childList.get(groupPosition).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 true;
    }


    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        final GroupViewHolder groupViewHolder;
        if (convertView == null) {
            groupViewHolder = new GroupViewHolder();
            convertView = inflater.inflate(R.layout.elv_group_item, null);
            groupViewHolder.cbGroup = convertView.findViewById(R.id.cbGroup);
            convertView.setTag(groupViewHolder);
        } else {
            groupViewHolder = (GroupViewHolder) convertView.getTag();
        }
        //设置值
        final SellerBean sellerBean = groupList.get(groupPosition);
        groupViewHolder.cbGroup.setText(sellerBean.getSellName());
        groupViewHolder.cbGroup.setChecked(sellerBean.isChecked());


        //给商家设置点击事件
        groupViewHolder.cbGroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                state = UPDATE_CART;
                groupIndex = groupPosition;
                //更新购物车列表
                isSellerChecked = groupViewHolder.cbGroup.isChecked();
                //初始化商品的下标为0
                childIndex = 0;
                updateProduct();


            }
        });
        return convertView;
    }


    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup
            parent) {
        final ChildViewHolder childViewHolder;
        if (convertView == null) {
            childViewHolder = new ChildViewHolder();
            convertView = inflater.inflate(R.layout.elv_child_item, null);
            childViewHolder.cbChild = convertView.findViewById(R.id.cbChild);
            childViewHolder.iv = convertView.findViewById(R.id.iv);
            childViewHolder.tvTitle = convertView.findViewById(R.id.tvTitle);
            childViewHolder.tvPrice = convertView.findViewById(R.id.tvPrice);
            childViewHolder.addSubView = convertView.findViewById(R.id.addSub);
            convertView.setTag(childViewHolder);
        } else {
            childViewHolder = (ChildViewHolder) convertView.getTag();
        }
        //设置值
        final GetCartsBean.DataBean.ListBean listBean = childList.get(groupPosition).get(childPosition);
        childViewHolder.cbChild.setChecked(listBean.getSelected() == 0 ? false : true);
        Glide.with(context).load(listBean.getImages().split("\\|")[0]).into(childViewHolder.iv);
        childViewHolder.tvTitle.setText(listBean.getTitle());
        childViewHolder.tvPrice.setText("优惠价:¥" + listBean.getPrice());
        childViewHolder.addSubView.setNum(listBean.getNum() + "");


        //给cbChild设置点击事件
        childViewHolder.cbChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                state = GET_CARTS;
                //更新购物车列表
                boolean checked = childViewHolder.cbChild.isChecked();
                String selected = checked ? "1" : "0";
                int sellerid = listBean.getSellerid();
                int pid = listBean.getPid();
                String num = childViewHolder.addSubView.getNum();
                updateCartsPresenterImp.updateCarts(uid, sellerid + "", pid + "", num, selected, token);
            }
        });


        //给减号设置点击事件
        childViewHolder.addSubView.setOnSubClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                state = GET_CARTS;
                //更新购物车列表
                boolean checked = childViewHolder.cbChild.isChecked();
                String selected = checked ? "1" : "0";
                int sellerid = listBean.getSellerid();
                int pid = listBean.getPid();
                String num = childViewHolder.addSubView.getNum();
                int n = Integer.parseInt(num);
                if (n <= 1) {
                    Toast.makeText(context, "商品数量不能小于1", Toast.LENGTH_SHORT).show();
                    return;
                }
                num = (n - 1) + "";
                updateCartsPresenterImp.updateCarts(uid, sellerid + "", pid + "", num, selected, token);


            }
        });
        //给加号设置点击事件
        childViewHolder.addSubView.setOnAddClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                state = GET_CARTS;
                //更新购物车列表
                boolean checked = childViewHolder.cbChild.isChecked();
                String selected = checked ? "1" : "0";
                int sellerid = listBean.getSellerid();
                int pid = listBean.getPid();
                String num = childViewHolder.addSubView.getNum();
                int n = Integer.parseInt(num);
                num = (n + 1) + "";
                updateCartsPresenterImp.updateCarts(uid, sellerid + "", pid + "", num, selected, token);


            }
        });
        return convertView;
    }


    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }




    class GroupViewHolder {
        CheckBox cbGroup;
        TextView tvSeller;
    }




    class ChildViewHolder {
        CheckBox cbChild;
        ImageView iv;
        TextView tvTitle;
        TextView tvPrice;
        AddSubView addSubView;
    }


    private void updateProduct() {
        String selected = isSellerChecked ? "1" : "0";
        SellerBean sellerBean = groupList.get(groupIndex);
        String sellerid = sellerBean.getSellId();
        List<GetCartsBean.DataBean.ListBean> listBeans = childList.get(groupIndex);
        int pid = listBeans.get(childIndex).getPid();
        int num = listBeans.get(childIndex).getNum();
        updateCartsPresenterImp.updateCarts(uid, sellerid, pid + "", num + "", selected, token);
    }


    public void updateSeller(boolean isChecked) {
        state = UPDATE_SELLER;
        isSellerChecked = isChecked;
        groupIndex = 0;
        childIndex = 0;
        updateProduct();
    }


    /*
  更新购物车成功回调接口
   */
    @Override
    public void updateSucess() {
        switch (state) {
            case GET_CARTS:
                //更新成功后,再次调用获取购物车的接口
                getCartsPresenterImp.getCarts(uid, token);
                break;
            case UPDATE_CART:
                childIndex++;
                if (childIndex >= childList.get(groupIndex).size()) {
                    //更新成功后,再次调用获取购物车的接口
//                    getCartsPresenterImp.getCarts(uid, token);
                    state = GET_CARTS;
                    updateSucess();
                } else {
                    updateProduct();
                }
                break;
            case UPDATE_SELLER:
                childIndex++;
                if (childIndex >= childList.get(groupIndex).size()) {
                    //该商家下的所有商品都已更新完成,接着更新其它商家下的商品
                    groupIndex++;
                    if (groupIndex>=groupList.size()){
                        //所有商家都已更新完成,重新获取购物车
//                    getCartsPresenterImp.getCarts(uid, token);
                        state = GET_CARTS;
                        updateSucess();
                    }else{
                        //还有别的商家未更新
                        childIndex = 0;
                        updateProduct();
                    }


                }else{
                    updateProduct();
                }


                break;
        }


    }

}

-----------------------------------------------------------------------------------------------------------------------------

MainActivity

package com.example.a1512qweek4.view;


import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;


import com.example.a1512qweek4.ElvAdapter;
import com.example.a1512qweek4.R;
import com.example.a1512qweek4.bean.GetCartsBean;
import com.example.a1512qweek4.bean.SellerBean;
import com.example.a1512qweek4.presenter.GetCartsPresenterImp;


import java.util.List;


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


    private ExpandableListView mElv;
    /**
     * 全选/反选
     */
    private CheckBox mCbAll;
    /**
     * 总价
     */
    private TextView mTvMoney;
    private TextView mTvTotal;
    private GetCartsPresenterImp getCartsPresenterImp;
    private ElvAdapter elvAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        SharedPreferences sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE);
        String uid = sharedPreferences.getString("uid", "");
        String token = sharedPreferences.getString("token", "");
        //绑定
        getCartsPresenterImp = new GetCartsPresenterImp(this);
        getCartsPresenterImp.getCarts(uid, token);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        getCartsPresenterImp.detach();


    }


    @Override
    public void show(List<SellerBean> groupList, List<List<GetCartsBean.DataBean.ListBean>> childList) {
        elvAdapter = new ElvAdapter(this, groupList, childList, getCartsPresenterImp);
        mElv.setAdapter(elvAdapter);


        for (int i = 0; i < groupList.size(); i++) {
            mElv.expandGroup(i);
        }


    }


    private void initView() {
        mElv = (ExpandableListView) findViewById(R.id.elv);
        mCbAll = (CheckBox) findViewById(R.id.cbAll);
        mTvMoney = (TextView) findViewById(R.id.tvMoney);
        mTvTotal = (TextView) findViewById(R.id.tvTotal);


        mCbAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (elvAdapter != null) {
                    elvAdapter.updateSeller(mCbAll.isChecked());
                }
            }
        });
        mTvTotal.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.tvTotal:
                //跳转到我的页面
                Intent intent = new Intent(MainActivity.this,MineActivity.class);
                startActivity(intent);
                break;
        }
    }

}

------------------------------------------------------------------------------------------------------------------------------

LoginActivity

package com.example.a1512qweek4.view;


import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


import com.example.a1512qweek4.R;
import com.example.a1512qweek4.bean.UserBean;
import com.example.a1512qweek4.net.Api;
import com.example.a1512qweek4.net.OkhttpUtils;
import com.example.a1512qweek4.net.OnNetListener;
import com.google.gson.Gson;


public class LoginActivity extends AppCompatActivity implements View.OnClickListener {


    /**
     * 登录
     */
    private Button mBt;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
    }


    private void initView() {
        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt:
                OkhttpUtils.getInstance().doGet(Api.LOGIN_URL, new OnNetListener() {
                    @Override
                    public void onSuccess(String result) {
                        UserBean userBean = new Gson().fromJson(result, UserBean.class);
                        //保存用户信息
                        SharedPreferences sharedPreferences = LoginActivity.this.getSharedPreferences("user", Context
                                .MODE_PRIVATE);
                        SharedPreferences.Editor edit = sharedPreferences.edit();
                        edit.putString("uid", userBean.getData().getUid() + "");
                        edit.putString("token", userBean.getData().getToken());
                        edit.commit();
                        Toast.makeText(LoginActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                        //跳转到购物车页面
                        Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                        startActivity(intent);
                        //关闭当前页面
                        LoginActivity.this.finish();
                    }


                    @Override
                    public void onFailed(Exception e) {


                    }
                });
                break;
        }
    }

}

--------------------------------------------------------------------------------------------------------------------------------

MineActivity

package com.example.a1512qweek4.view;


import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;


import com.example.a1512qweek4.R;
import com.example.a1512qweek4.net.Api;
import com.example.a1512qweek4.net.OkhttpUtils;
import com.example.a1512qweek4.net.OnNetListener;


import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;


public class MineActivity extends AppCompatActivity implements View.OnClickListener {


    private ImageView mIv;
    private LinearLayout mLl;
    private PopupWindow popupWindow;
    private String imgPath;
    private String imgCropPath;
    private Uri imageFileUri;
    private String uid;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mine);
        imgPath = getExternalCacheDir().getPath() + "/header.jpg";
        imgCropPath = getExternalCacheDir().getPath() + "/header_crop.jpg";
        File file = new File(imgPath);
        imageFileUri = Uri.fromFile(file);
        initView();
        SharedPreferences sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE);
        uid = sharedPreferences.getString("uid", "");
    }


    private void initView() {
        mIv = (ImageView) findViewById(R.id.iv);
        mIv.setOnClickListener(this);
        mLl = (LinearLayout) findViewById(R.id.ll);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.iv:
                //弹出PopupWindow
                View view = View.inflate(MineActivity.this, R.layout.pop_item, null);
                initPopItem(view);
                popupWindow = new PopupWindow(view, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout
                        .LayoutParams.WRAP_CONTENT);
                popupWindow.setOutsideTouchable(true);
                popupWindow.setBackgroundDrawable(new ColorDrawable());
                popupWindow.showAtLocation(mLl, Gravity.BOTTOM, 0, 0);
                break;
        }
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 1000:
                if (resultCode == RESULT_OK) {
                    //拍照成功,剪切图片
                    Toast.makeText(MineActivity.this, "拍照成功", Toast.LENGTH_SHORT).show();
                    crop(imageFileUri);
                }
                break;
            case 2000:
                try {
                    //拍照后裁剪成功
                    //先获取裁剪后的图片
                    Bitmap bitmap = data.getParcelableExtra("data");


                    File file = new File(imgCropPath);
                    //判断该文件创建
                    if (file.exists()) {
                        file.delete();
                    }
                    //创建出新的文件
                    file.createNewFile();
                    FileOutputStream fos = new FileOutputStream(file);


                    //把裁剪后的图片保存到本地
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                    //上传到服务器


                    Map<String, String> params = new HashMap<>();
                    params.put("uid", uid);
                    OkhttpUtils.getInstance().uploadFile(Api.UPLOADHEADER, params, "header_crop.jpg", file, new
                            OnNetListener() {


                                @Override
                                public void onSuccess(String result) {
                                    Toast.makeText(MineActivity.this, result, Toast.LENGTH_SHORT).show();
                                }


                                @Override
                                public void onFailed(Exception e) {


                                }
                            });
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;


            case 3000:
                Uri uri = data.getData();
                crop(uri);
                break;
        }
    }


    private void crop(Uri uri) {
        Intent intent = new Intent();


        //指定裁剪的动作
        intent.setAction("com.android.camera.action.CROP");


        //设置裁剪的数据(uri路径)....裁剪的类型(image/*)
        intent.setDataAndType(uri, "image/*");


        //执行裁剪的指令
        intent.putExtra("crop", "true");
        //指定裁剪框的宽高比
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);


        //指定输出的时候宽度和高度
        intent.putExtra("outputX", 300);
        intent.putExtra("outputY", 300);


        //设置取消人脸识别
        intent.putExtra("noFaceDetection", false);
        //设置返回数据
        intent.putExtra("return-data", true);


        //
        startActivityForResult(intent, 2000);
    }


    private void initPopItem(View view) {
        TextView tvCamera = view.findViewById(R.id.tvCamera);
        TextView tvCancle = view.findViewById(R.id.tvCancle);
        TextView tvPhoto = view.findViewById(R.id.tvPhoto);


        tvCamera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (popupWindow != null && popupWindow.isShowing()) {
                    popupWindow.dismiss();
                }
                //调用相机,需要隐式意图
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri);
                startActivityForResult(intent, 1000);




            }
        });
        tvPhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (popupWindow != null && popupWindow.isShowing()) {
                    popupWindow.dismiss();
                }
                Intent intent = new Intent();
                //指定选择/获取的动作...PICK获取,拿
                intent.setAction(Intent.ACTION_PICK);
                //指定获取的数据的类型
                intent.setType("image/*");


                startActivityForResult(intent, 3000);
            }
        });
        tvCancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (popupWindow != null && popupWindow.isShowing()) {
                    popupWindow.dismiss();
                }
            }
        });
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值