OkHttp+RecyclerView购物车(二)

先看看效果

          

首先就是先导入依赖

compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.jakewharton:butterknife:8.8.1'
compile 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.liaoinstan.springview:library:1.2.6'
compile files('libs/gson-2.3.1.jar')
compile files('libs/universal-image-loader-1.9.3.jar')
加链接网络的权限
<uses-permission android:name="android.permission.INTERNET"/>
下面是布局
activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    tools:context="bwie.com.ggg.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/rl"></android.support.v7.widget.RecyclerView>

    <RelativeLayout
        android:id="@+id/rl"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:padding="5dp">
        <TextView
            android:id="@+id/quanxuan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/a2"
            android:text="全选"
            android:textSize="20sp"
            />
        <TextView
            android:layout_toRightOf="@+id/quanxuan"
            android:id="@+id/zongjia"
            android:layout_width="wrap_content"
            android:layout_height="25dp"
            android:text="总价:"
            android:textSize="16sp"
            android:textColor="#FF0000"
            android:layout_marginLeft="10dp"/>
        <TextView
            android:layout_toRightOf="@+id/quanxuan"
            android:layout_below="@+id/zongjia"
            android:id="@+id/geshu"
            android:layout_width="wrap_content"
            android:layout_height="25dp"
            android:text="总数:"
            android:textSize="16sp"
            android:textColor="#FF0000"
            android:layout_marginLeft="10dp"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="结算"
            android:background="#F4CA26"
            android:textColor="#FFFFFF"
            android:textSize="18sp"
            android:layout_alignBaseline="@+id/quanxuan"
            android:layout_alignBottom="@+id/quanxuan"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />
    </RelativeLayout>

list_item

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:padding="10dp">
    <CheckBox
        android:id="@+id/cb_cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="false"/>
    <TextView
        android:id="@+id/tv_shang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="............"
        android:layout_toRightOf="@+id/cb_cb"
        android:layout_marginLeft="10dp"/>
    <CheckBox
        android:id="@+id/xuan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:checked="false"/>
    <TextView
        android:layout_toRightOf="@+id/xuan"
        android:id="@+id/tv_tou"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="................."
        android:layout_marginLeft="10dp"
        android:layout_marginTop="30dp"/>
    <TextView
        android:layout_toRightOf="@+id/xuan"
        android:id="@+id/tv_ming"
        android:layout_below="@+id/tv_tou"
        android:layout_marginTop="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="................."
        android:layout_marginLeft="10dp"/>
    <TextView
        android:layout_below="@+id/tv_ming"
        android:layout_toRightOf="@+id/xuan"
        android:id="@+id/tv_jiage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="......"
        android:textColor="#FF0000"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"/>

    <Button
        android:id="@+id/btn_shan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除订单"
        android:layout_alignBaseline="@+id/tv_ming"
        android:layout_alignBottom="@+id/tv_ming"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <RelativeLayout
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/btn_shan"
        android:layout_toStartOf="@+id/btn_shan"
        android:layout_marginRight="14dp"
        android:layout_marginEnd="14dp"
        android:layout_marginTop="30dp">

        <bwie.com.ggg.ShuLiang
            android:id="@+id/sl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></bwie.com.ggg.ShuLiang>
    </RelativeLayout>
</RelativeLayout>
shuliang 这个是加减数量的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">
<Button
    android:id="@+id/btn_jian"
    android:layout_width="35dp"
    android:layout_height="80dp"
    android:text="一"/>
    <EditText
        android:id="@+id/et_shu"
        android:layout_width="25dp"
        android:layout_height="80dp"
        android:text="1"/>
    <Button
        android:id="@+id/btn_jia"
        android:layout_width="35dp"
        android:layout_height="80dp"
        android:text="十"/>
</LinearLayout>

---------------------------下面就是代码---------------------
MainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;

import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;


import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {
    String bai = "http://120.27.23.105/product/getCarts?uid=100";
    RecyclerView rv;
    private List<Bean.DataBean> data=new ArrayList<>();
    private List<Bean.DataBean.ListBean> list=new ArrayList<>();
    @BindView(R.id.quanxuan)//全选按钮
        TextView qxBtn;
    @BindView(R.id.zongjia)
        TextView zongjia;
    @BindView(R.id.geshu)
        TextView geshu;
    boolean allck = false;
    Myadapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        rv = (RecyclerView) findViewById(R.id.rv);
        //初始化ImageLoader
        ImageLoaderConfiguration cofn = ImageLoaderConfiguration.createDefault(this);
        ImageLoader.getInstance().init(cofn);
        DisplayImageOptions simple = DisplayImageOptions.createSimple();

        okURL();
        init();
    }

    private void init() {
        //LinearLayoutManager布局样式
        LinearLayoutManager manager = new LinearLayoutManager(this);
        //  GridLayoutManager布局样式
        //GridLayoutManager manager = new GridLayoutManager(this, 2);
        //设置样式
        rv.setLayoutManager(manager);
        //设置方向   VERTICAL垂直方向
        //想要添加分割线,必须要写上这行代码
        rv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
    }

    //okhttp的网络请求
    private void okURL() {
        OkHttp3Utils.doGet(bai, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //Gson解析
                Gson gson = new Gson();
                String strs = response.body().string();
                data = gson.fromJson(strs, Bean.class).getData();
                //循环遍历找底层集合里的数据
                for (int i = 0; i < data.size(); i++) {
                    for (int j = 0; j < data.get(i).getList().size(); j++) {
                        list.add(data.get(i).getList().get(j));
                    }
                }

                //判断call,如果返回ture就继续执行,否则就不行
                if (response.isSuccessful()) {

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            adapter=new Myadapter();
                            //设置适配器
                            rv.setAdapter(adapter);
                            //刷新适配器
                            //adapter.notifyDataSetChanged();
                        }
                    });
                }

            }
        });
    }
    //计算商品个数和总价
    private void getzongshuju() {
        double sum = 0;//初始价格总和
        int zongshu = 0;//初始商品总数
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getSelected() == 1) {//判断  商品是否是选中状态
                //获得选中商品数量
                int i1 = list.get(i).getNum();
                //价格总和 = 价格总和 + 廉价后的价格* 选中商品数量
                sum = sum + list.get(i).getBargainPrice() * i1;
                //总个数=总个数+获得选中商品的数量
                zongshu = zongshu + i1;
            }
        }
        //将得到的总价  转换成浮点型 赋给 zongjia(总价)
        zongjia.setText("总价:" + new DecimalFormat("0.00").format(sum));
        geshu.setText("共" + zongshu + "件商品");//将得到的总个数赋给  geshu(个数)

    }
    private void jiageshu() {
        double sum = 0;//初始价格总和
        int zongshu = 0;//初始商品总数
        for (int i = 0; i < data.size(); i++) {
            if (data.get(i).getSellerid().equals(1)) {//判断  商品是否是选中状态
                //获得选中商品数量
                int i1 =list.get(i).getNum();
                //价格总和 = 价格总和 + 廉价后的价格* 选中商品数量
                sum = sum + list.get(i).getBargainPrice() * i1;
                //总个数=总个数+获得选中商品的数量
                zongshu = zongshu + i1;
            }
        }
        zongjia.setText("总价:" + new DecimalFormat("0.00").format(sum));
        geshu.setText("共" + zongshu + "件商品");//将得到的总个数赋给  geshu(个数

    }
    @OnClick(R.id.quanxuan)
    public void onViewClicked() {
        allck = !allck;//全部选中,或者全部不选中
        if (allck) { //判断   是否是全选中状态
            //是全选中状态    赋给全选按钮的背景资源是  shopcart_selected  这个图片
            qxBtn.setBackgroundResource(R.drawable.a1);
            for (int i = 0; i < list.size(); i++) {
                //给商品的选中状态都变成 1   (就是选中状态)
                list.get(i).setSelected(1);
                list.get(i).setShopsele(true);//给商铺的选中状态都变成 true   (就是选中状态)
            }
        } else {
            //不是全选中状态    赋给全选按钮的背景资源是  shopcart_unselected  这个图片
            qxBtn.setBackgroundResource(R.drawable.a2);
            for (int i = 0; i < list.size(); i++) {
                list.get(i).setSelected(0);//给商品的选中状态都变成 0  (就是不选中状态)
                list.get(i).setShopsele(true);//给商铺的选中状态都变成 false   (就是不选中状态)
            }
        }
        getzongshuju();//计算商品个数和总价
        adapter.notifyDataSetChanged();

    }

    //适配器类
    class Myadapter extends RecyclerView.Adapter<Myadapter.MyViewHolder> {

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = View.inflate(MainActivity.this, R.layout.list_item, null);
            return new MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, final int position) {

            for (int i = 0; i < data.size(); i++) {
                if (data.get(i).getSellerid().equals(""+list.get(position).getSellerid())){
                    holder.tv_shang.setText(data.get(i).getSellerName());
                }
            }

            if (allck==true){
                holder.cb_cb.setBackgroundResource(R.drawable.a1);
                holder.cb_xuan.setBackgroundResource(R.drawable.a1);
            }
            else {
                holder.cb_cb.setBackgroundResource(R.drawable.a2);
                holder.cb_xuan.setBackgroundResource(R.drawable.a2);
            }

            //holder.tv_shang.setText(data.get(position).getSellerName());
            holder.tv_tou.setText(list.get(position).getTitle());
            holder.tv_ming.setText(list.get(position).getSubhead());
            holder.tv_jiage.setText(list.get(position).getPrice() + "");
            //删除按钮
            holder.btn_shan.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    list.remove(position);
                    notifyDataSetChanged();
                }
            });

        }


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

        class MyViewHolder extends RecyclerView.ViewHolder {
            TextView tv_tou, tv_ming, tv_jiage,tv_shang;
            Button btn_shan;
            CheckBox cb_xuan,cb_cb;
            public MyViewHolder(View itemView) {
                super(itemView);
                cb_xuan= (CheckBox) itemView.findViewById(R.id.xuan);
                cb_cb= (CheckBox) itemView.findViewById(R.id.cb_cb);
                tv_tou = (TextView) itemView.findViewById(R.id.tv_tou);
                tv_ming = (TextView) itemView.findViewById(R.id.tv_ming);
                tv_jiage = (TextView) itemView.findViewById(R.id.tv_jiage);
                tv_shang = (TextView) itemView.findViewById(R.id.tv_shang);
                btn_shan = (Button) itemView.findViewById(R.id.btn_shan);
            }
        }
    }
}

OkHttp3Utils  OkHttp封装,这是封装好的也不用再修改什么变量,就直接复制就能用

import android.util.Log;

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

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;

/**
 * OkHttp的封装类
 */
public class OkHttp3Utils {

    private static OkHttpClient okHttpClient = null;

    public OkHttp3Utils() {
    }

    private static OkHttpClient getOkHttpClient() {
        synchronized (OkHttp3Utils.class) {
            if (okHttpClient == null) {
                okHttpClient = new OkHttpClient();
            }
        }
        return okHttpClient;
    }

    //上传文件
    public static void loadFile(String url, File file,String fileName){
        OkHttpClient okHttpClient = getOkHttpClient();
        //设置文件类型
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"),file);
        //设置请求体
        RequestBody body = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("image",fileName,requestBody)
                .build();
        //请求方式
        Request request = new Request.Builder().url(url).post(body).build();

        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i("成功","成功");
            }
        });
    }

    /**
     * 1.接口地址
     * 2.接口回调
     */
    public static void doGet(String url,Callback callback){
        OkHttpClient okHttpClient = getOkHttpClient();
        Request request = new Request.Builder().url(url).build();
        okHttpClient.newCall(request).enqueue(callback);
    }

    /**
     * 1.地址
     * 2.接口回调
     * 3.请求体
     */

    public static void doPost(String url, Map<String,String> map,Callback callback){
        OkHttpClient okHttpClient = getOkHttpClient();
        FormBody.Builder builder = new FormBody.Builder();
        //遍历map集合   设置请求体
        for (String mapKey : map.keySet()){
            builder.add(mapKey,map.get(mapKey));
        }
        //设置请求方式
        Request request = new Request.Builder().url(url).post(builder.build()).build();
        //执行请求方式    接口回调
        okHttpClient.newCall(request).enqueue(callback);
    }

    /**
     *1.下载地址
     */
    public static void doDown(String url,Callback callback){
        OkHttpClient okHttpClient = getOkHttpClient();
        Request build = new Request.Builder().url(url).build();

        okHttpClient.newCall(build).enqueue(callback);
    }
}

ShuLiang 计算加减商品数量的类

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;


public class ShuLiang extends LinearLayout {
    Button btn_jian,btn_jia;
    EditText et_shu;
    int bai=1;
    public ShuLiang(Context context) {
        super(context);
    }

    public ShuLiang(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view=LinearLayout.inflate(context,R.layout.shuliang,null);
        btn_jian= (Button) view.findViewById(R.id.btn_jian);
        btn_jia= (Button) view.findViewById(R.id.btn_jia);
        et_shu= (EditText) view.findViewById(R.id.et_shu);
        btn_jian.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String content=et_shu.getText().toString().trim();
                int count=Integer.valueOf(content)-1;
                bai=count;
                if (count>1){
                    et_shu.setText(count+"");
                }
            }
        });
        btn_jia.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String content=et_shu.getText().toString().trim();
                int count=Integer.valueOf(content)+1;
                bai=count;
                et_shu.setText(count+"");

            }
        });

        addView(view);
    }

    public ShuLiang(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

一个简单的购物车就出来了,里面还有些小bug,



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值