您的位置:首页 > 理论基础 > 计算机网络

OkHttp+RecyclerView购物车(二)

2017-11-23 10:22 183 查看
先看看效果          首先就是先导入依赖
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.RecyclerViewandroid:id="@+id/rv"android:layout_w4000idth="match_parent"android:layout_height="match_parent"android:layout_above="@+id/rl"></android.support.v7.widget.RecyclerView><RelativeLayoutandroid: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"><TextViewandroid:id="@+id/quanxuan"android:layout_width="wrap_content"android:layout_height="wrap_content"android:drawableLeft="@drawable/a2"android:text="全选"android:textSize="20sp"/><TextViewandroid: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"/><TextViewandroid: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"/><Buttonandroid: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"><CheckBoxandroid:id="@+id/cb_cb"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="false"/><TextViewandroid: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"/><CheckBoxandroid:id="@+id/xuan"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="30dp"android:checked="false"/><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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"/><Buttonandroid: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" /><RelativeLayoutandroid: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.ShuLiangandroid: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"><Buttonandroid:id="@+id/btn_jian"android:layout_width="35dp"android:layout_height="80dp"android:text="一"/><EditTextandroid:id="@+id/et_shu"android:layout_width="25dp"android:layout_height="80dp"android:text="1"/><Buttonandroid: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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);rv = (RecyclerView) findViewById(R.id.rv);//初始化ImageLoaderImageLoaderConfiguration 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() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic 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() {@Overridepublic 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> {@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = View.inflate(MainActivity.this, R.layout.list_item, null);return new MyViewHolder(view);}@Overridepublic 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() {@Overridepublic void onClick(View v) {list.remove(position);notifyDataSetChanged();}});}@Overridepublic 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() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: