OkHttp+RecyclerView购物车(二)

来源:互联网 发布:linux 发送tcp报文 编辑:程序博客网 时间:2024/06/05 07:32

先看看效果

          

首先就是先导入依赖

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,



原创粉丝点击