登录注册到展示数据到购物车代码
2018-01-06 10:47
513 查看
MainActivity
package com.example.wanggang001;
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.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.wanggang001.bean.LoginBean;
import com.example.wanggang001.presenter.MyLoginpresenter;
import com.example.wanggang001.view.MyLoginview;
import java.security.MessageDigest;
/**
* 13301070105
* 13301070105
*
* @Data 2017/12/21
* @Author WangGang
* @ 此类/方法的作用
*/
public class MainActivity extends AppCompatActivity implements MyLoginview, View.OnClickListener {
private EditText et_phone;
private EditText et_pwd;
private Button btn_login;
private MyLoginpresenter myLoginpresenter;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找我们的布局控件
et_phone = (EditText) findViewById(R.id.et_phone);
et_pwd = (EditText) findViewById(R.id.et_pwd);
btn_login = (Button) findViewById(R.id.btn_login);
textView = (TextView) findViewById(R.id.text_zhuce);
textView.setOnClickListener(this);
btn_login.setOnClickListener(this);
//创建对象
myLoginpresenter = new MyLoginpresenter(this, this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_login://判断
if (et_phone.getText().toString().equals("13301070105") && et_pwd.getText().toString().equals("123456")) {
myLoginpresenter.jsondata(et_phone.getText().toString(), et_pwd.getText().toString());
} else {
Toast.makeText(this, "手机号或密码不能为空,请重新输入。。。", Toast.LENGTH_SHORT).show();
}
break;
case R.id.text_zhuce://跳到注册页面去
startActivity(new Intent(MainActivity.this, ZhuceActivity.class));
finish();
break;
default:
break;
}
}
@Override
public void showview(LoginBean loginBean) {
Toast.makeText(this, loginBean.getMsg(), Toast.LENGTH_SHORT).show();
if (loginBean.getMsg().equals("登录成功")) {
//跳到商品的页面去
startActivity(new Intent(MainActivity.this, ShopActivity.class));
finish();
}
}
//解绑的操作
@Override
protected void onDestroy() {
super.onDestroy();
myLoginpresenter.death();
}
//md5的加密
public static String MD5(String str) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
e.printStackTrace();
}
//将字符串转换成字符串数组
char[] pswdArray = str.toCharArray();
byte[] pswdByte = new byte[pswdArray.length];
//将字符转换成字节
for (int i = 0; i < pswdArray.length; i++) {
pswdByte[i] = (byte) pswdArray[i];
}
byte[] digest = md5.digest(pswdByte);
//将得到的字节数组转换成十六进制数
StringBuffer buff = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
int num = ((int) digest[i]);
//如果不足16,加0填充
if (num < 16)
buff.append("0");
buff.append(Integer.toHexString(num));
}
return buff.toString();
}
//用SharedPreferences将得到的十六进制存在本地中
public void savePSWD(String pswd) {
String md5pswd = MD5(pswd);
SharedPreferences.Editor editor = getSharedPreferences("pswdword", MODE_PRIVATE).edit();
editor.putString("pswd", md5pswd);
editor.commit();
}
}
ZhuceActivity
package com.example.wanggang001;
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.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.wanggang001.bean.ZhuceBean;
import com.example.wanggang001.presenter.MyZhucepresenter;
import com.example.wanggang001.view.MyZzhuceview;
import java.security.MessageDigest;
/**
* @Data 2017/12/21
* @Author WangGang
* @ 此类/方法的作用
*/
public class ZhuceActivity extends AppCompatActivity implements MyZzhuceview, View.OnClickListener {
private EditText et_phone02;
private EditText et_pwd02;
private Button btn_zhuce;
private MyZhucepresenter myZhucepresenter;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zhuce);
//找我们的布局控件
textView = (TextView) findViewById(R.id.text_tuichu);
et_phone02 = (EditText) findViewById(R.id.et_phone02);
//找我们的布局控件
et_pwd02 = (EditText) findViewById(R.id.et_pwd02);
btn_zhuce = (Button) findViewById(R.id.btn_zhuce);
btn_zhuce.setOnClickListener(this);
textView.setOnClickListener(this);
//输入框的值
myZhucepresenter = new MyZhucepresenter(this, this);
}
@Override
public void showviewzhuce(ZhuceBean zhuceBean) {
Toast.makeText(this, zhuceBean.getMsg(), Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_zhuce:
if (et_phone02.getText().toString() != null && et_pwd02.getText().toString() != null) {
myZhucepresenter.jsondata(et_phone02.getText().toString(), et_pwd02.getText().toString());
} else {
Toast.makeText(this, "手机号或密码不能为空,请重新输入。。。", Toast.LENGTH_SHORT).show();
}
break;
case R.id.text_tuichu:
//跳到登录页面
startActivity(new Intent(ZhuceActivity.this, MainActivity.class));
finish();
break;
default:
break;
}
}
//解绑的操作
@Override
protected void onDestroy() {
super.onDestroy();
myZhucepresenter.death();;
}
//md5的加密
public static String MD5(String str) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
e.printStackTrace();
}
//将字符串转换成字符串数组
char[] pswdArray = str.toCharArray();
byte[] pswdByte = new byte[pswdArray.length];
//将字符转换成字节
for (int i = 0; i < pswdArray.length; i++) {
pswdByte[i] = (byte) pswdArray[i];
}
byte[] digest = md5.digest(pswdByte);
//将得到的字节数组转换成十六进制数
StringBuffer buff = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
int num = ((int) digest[i]);
//如果不足16,加0填充
if (num < 16)
buff.append("0");
buff.append(Integer.toHexString(num));
}
return buff.toString();
}
//用SharedPreferences将得到的十六进制存在本地中
public void savePSWD(String pswd) {
String md5pswd = MD5(pswd);
SharedPreferences.Editor editor = getSharedPreferences("pswdword", MODE_PRIVATE).edit();
editor.putString("pswd", md5pswd);
editor.commit();
}
}
ShopActivity
package com.example.wanggang001;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import com.example.wanggang001.bean.ShopBean;
import com.example.wanggang001.shopadater.ShopAdater;
import com.example.wanggang001.shopadater.ShopView;
import com.example.wanggang001.shopadater.Shoppresnter;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
/**
*
*
*
*
* @Data 2017/12/21
* @Author WangGang
* @ 此类/方法的作用
*/
public class ShopActivity extends AppCompatActivity implements ShopView{
private XRecyclerView xrecyclerview_01;
private Shoppresnter shoppresnter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shop);
//找我们的布局控件
xrecyclerview_01 = (XRecyclerView) findViewById(R.id.xrecyclerview_01);
shoppresnter = new Shoppresnter(this,this);
shoppresnter.jsondata();
}
@Override
public void showshopview(ShopBean shopBean) {
//设置适配器
ShopAdater shopAdater = new ShopAdater(ShopActivity.this, shopBean);
xrecyclerview_01.setAdapter(shopAdater);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
xrecyclerview_01.setLayoutManager(linearLayoutManager);
xrecyclerview_01.setPullRefreshEnabled(false);
//接口回调监听事件
shopAdater.setclick(new ShopAdater.Clicklistener() {
@Override
public void dianjiclick(View view, int position, String pid, String text_title, String text_price, String image) {
//传值
Intent intent = new Intent(ShopActivity.this, AddActivity.class);
intent.putExtra("text_title", text_title);
intent.putExtra("text_price", text_price);
intent.putExtra("pid", pid);
intent.putExtra("image", image);
startActivity(intent);
}
});
}
//销毁
@Override
protected void onDestroy() {
super.onDestroy();
shoppresnter.death();
}
}
AddActivity
package com.example.wanggang001;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
import com.bumptech.glide.Glide;
import com.example.wanggang001.addadater.Addpresenter;
import com.example.wanggang001.addadater.Addview;
import com.example.wanggang001.bean.AddBean;
/**
* @Data 2017/12/21
* @Author WangGang
* @ 此类/方法的作用
*/
public class AddActivity extends AppCompatActivity implements Addview, View.OnClickListener {
private ImageView image_add_view;
private TextView text_add_title;
private TextView text_add_price;
private String pid;
private Button btn_add;
private Button btn_buy;
pr
16e63
ivate Addpresenter addpresenter;
private VideoView videoView;
//是使用handler发送延迟的消息
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
Toast.makeText(AddActivity.this, "正在缓冲中。。。。", Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
//找我们的布局控件
image_add_view = (ImageView) findViewById(R.id.image_add_view);
text_add_title = (TextView) findViewById(R.id.text_add_title);
//找我们的布局控件
text_add_price = (TextView) findViewById(R.id.text_add_price);
btn_add = (Button) findViewById(R.id.btn_add);
//找我们的布局控件
btn_add.setOnClickListener(this);
btn_buy = (Button) findViewById(R.id.btn_buy);
btn_buy.setOnClickListener(this);
//接收数据
Intent intent = getIntent();
String name = intent.getStringExtra("text_title");
String price = intent.getStringExtra("text_price");
pid = intent.getStringExtra("pid");
String image = intent.getStringExtra("image");
//设置数据
text_add_title.setText(name);
text_add_price.setText("$:" + price);
//设置图片
Glide.with(AddActivity.this).load(image).into(image_add_view);
//----------播放视频-----------------------------------------------------------
//控件
videoView = (VideoView) this.findViewById(R.id.videoView);
String videoUrl2 = Utils.videoUrl;
//转换
Uri uri = Uri.parse(videoUrl2);
//设置视频控制器
videoView.setMediaController(new MediaController(this));
//播放完成回调
videoView.setOnCompletionListener(new MyPlayerOnCompletionListener());
//设置视频路径
videoView.setVideoURI(uri);
if (videoView != null) {
handler.sendEmptyMessageDelayed(0, 2000);
// Toast.makeText(AddActivity.this, "正在缓冲中。。。。", Toast.LENGTH_SHORT).show();
}
//开始播放视频
videoView.start();
}
class MyPlayerOnCompletionListener implements MediaPlayer.OnCompletionListener {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(AddActivity.this, "播放完成了", Toast.LENGTH_SHORT).show();
}
}
@Override
public void showaddview(AddBean addBean) {
//跳转购物车页面
Toast.makeText(this, addBean.getMsg(), Toast.LENGTH_SHORT).show();
if (addBean.getMsg().equals("加购成功")) {
startActivity(new Intent(AddActivity.this, CartShopActivity.class));
}
}
@Override
public void onClick(View view) {//点击事件
switch (view.getId()) {
case R.id.btn_add:
//点击加入购物车
addpresenter = new Addpresenter(this, this);
addpresenter.jsondata(pid);
break;
case R.id.btn_buy:
Toast.makeText(this, "购买成功", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
//视频的网址
public class Utils {
public static final String videoUrl = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";
}
//解绑的操作
@Override
protected void onDestroy() {
super.onDestroy();
addpresenter.death();
}
}
CartShopActivity
package com.example.wanggang001;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
import com.example.wanggang001.bean.CartBean;
import com.example.wanggang001.cartadater.MyPresenter;
import com.example.wanggang001.cartadater.RecyAdapter;
import com.example.wanggang001.cartadater.ViewCallBack;
/**
* @Data 2017/12/21
* @Author WangGang
* @ 此类/方法的作用
*/
public class CartShopActivity extends AppCompatActivity implements ViewCallBack {
private RecyclerView recyclerView;
private TextView total_price;
private TextView total_num;
private CheckBox quanxuan;
private MyPresenter myPresenter;
private RecyAdapter recyAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart_shop);
//找我们的布局控件
recyclerView = (RecyclerView) findViewById(R.id.recycler_View);
total_price = (TextView) findViewById(R.id.total_price);
total_num = (TextView) findViewById(R.id.total_num);
quanxuan = (CheckBox) findViewById(R.id.quanxuan);
quanxuan.setTag(1);
LinearLayoutManager manager = new LinearLayoutManager(CartShopActivity.this);
//适配器
recyAdapter = new RecyAdapter(this);
myPresenter = new MyPresenter(this);
myPresenter.getData();
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(recyAdapter);
//调用recyAdapter里面的接口,设置 全选按钮 总价 总数量
recyAdapter.setUpdateListener(new RecyAdapter.UpdateListener() {
@Override
public void setTotal(String total, String num, boolean allCheck) {
total_num.setText("共" + num + "件商品");//总数量
total_price.setText("合计 :¥" + total );//总价
if (allCheck) {
quanxuan.setTag(2);
quanxuan.setBackgroundResource(R.drawable.shopcart_selected);
} else {
quanxuan.setTag(1);
quanxuan.setBackgroundResource(R.drawable.shopcart_unselected);
}
quanxuan.setChecked(allCheck);
}
});
//这里只做ui更改, 点击全选按钮,,调到adapter里面操作
quanxuan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用adapter里面的方法 ,,把当前quanxuan状态传递过去
int tag = (int) quanxuan.getTag();
if (tag == 1) {
quanxuan.setTag(2);
quanxuan.setBackgroundResource(R.drawable.shopcart_selected);
} else {
quanxuan.setTag(1);
quanxuan.setBackgroundResource(R.drawable.shopcart_unselected);
}
recyAdapter.quanXuan(quanxuan.isChecked());
}
});
}
//实现接口,重写的方法
@Override
public void success(CartBean cartBean) {
//拿到返回来的数据 ,, 传给适配器数据
recyAdapter.add(cartBean);
}
@Override
public void failure(final Exception e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(CartShopActivity.this, "error", Toast.LENGTH_SHORT).show();
}
});
}
//解绑的操作
@Override
protected void onDestroy() {
super.onDestroy();
myPresenter.detach();
}
}
Applition
package com.example.wanggang001;
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
/**
* @Data 2017/12/1
* @Author WangGang
* @ 此类/方法的作用
*/
public class Applition extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化
Fresco.initialize(this);
}
}
AddMmodel
public class AddMmodel implements Addmodel {
@Override
public void getadddata(String pid, Callback callback) {
OkHttp3Utils.doGet("https://www.zhaoapi.cn/product/addCart?pid="+pid+"&uid=3831&token=DED1DEF0B7287F1575BD92B817A6C742&source=android",callback);
}
}
Addmodel
public interface Addmodel {
public void getadddata(String pid, Callback callback);
}
Addpresenter
public class Addpresenter {
Context context;
Addview addview;
AddMmodel addMmodel;
public Addpresenter(Context context, Addview addview) {
this.context = context;
this.addview = addview;
addMmodel = new AddMmodel();
}
public void jsondata(String pid) {
addMmodel.getadddata(pid,new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) {
Gson gson = new Gson();
AddBean addBean = gson.fromJson(result, AddBean.class);
addview.showaddview(addBean);
}
});
}
//解绑的操作
public void death(){
addview=null;
}
}
Addview
public interface Addview {
public void showaddview(AddBean addBean);
}
LloginMmodel
public class LloginMmodel implements Lloginmodel {
@Override
public void getdata(String phone, String pwd, Callback callback) {
OkHttp3Utils.doGet("https://www.zhaoapi.cn/user/login?mobile="+phone+"&password="+pwd+"",callback);
}
}
Lloginmodel
public interface Lloginmodel {
public void getdata(String phone,String pwd,Callback callback);
}
ZhuceLmodel
public interface ZhuceLmodel {
public void getdatazhuce(String phone, String pwd, Callback callback);
}
ZhuceMmodel
public class ZhuceMmodel implements ZhuceLmodel {
@Override
public void getdatazhuce(String phone, String pwd, Callback callback) {
OkHttp3Utils.doGet("https://www.zhaoapi.cn/user/reg?mobile="+phone+"&password="+pwd+"",callback);
}
}
MyLoginview
public interface MyLoginview {
public void showview(LoginBean loginBean);
}
MyZzhuceview
public interface MyZzhuceview {
public void showviewzhuce(ZhuceBean zhuceBean);
}
MyLoginpresenter
public class MyLoginpresenter {
Context context;
MyLoginview myLoginview;
LloginMmodel lloginMmodel;
public MyLoginpresenter(Context context, MyLoginview myLoginview) {
this.context = context;
this.myLoginview = myLoginview;
lloginMmodel = new LloginMmodel();
}
public void jsondata(String phone, String pwd) {
lloginMmodel.getdata(phone, pwd, new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) {
Gson gson = new Gson();
LoginBean loginBean = gson.fromJson(result, LoginBean.class);
myLoginview.showview(loginBean);
}
});
}
//解绑的操作
public void death(){
myLoginview=null;
}
}
MyZhucepresenter
public class MyZhucepresenter {
Context context;
MyZzhuceview myZzhuceview;
ZhuceMmodel zhuceMmodel;
public MyZhucepresenter(Context context, MyZzhuceview myZzhuceview) {
this.context = context;
this.myZzhuceview = myZzhuceview;
zhuceMmodel = new ZhuceMmodel();
}
public void jsondata(String phone, String pwd) {
zhuceMmodel.getdatazhuce(phone, pwd, new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) {
Gson gson = new Gson();
ZhuceBean zhuceBean = gson.fromJson(result, ZhuceBean.class);
myZzhuceview.showviewzhuce(zhuceBean);
}
});
}
//解绑的操作
public void death(){
myZzhuceview=null;
}
}
ShopAdater
public class ShopAdater extends RecyclerView.Adapter<ShopAdater.viewholder> {
Context context;
ShopBean shopBean;
public ShopAdater(Context context, ShopBean shopBean) {
this.context = context;
this.shopBean = shopBean;
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
}
@Override
public viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.shop_layout_01, null);
return new viewholder(view);
}
@Override
public void onBindViewHolder(viewholder holder, final int position) {
final String[] image = shopBean.getData().get(position).getImages().split("\\|");
ImageLoader.getInstance().displayImage(image[0], holder.image_01);
holder.text_price.setText("¥:"+shopBean.getData().get(position).getPrice());
holder.text_title.setText(shopBean.getData().get(position).getSubhead());
//获取pid
final String pid= shopBean.getData().get(position).getPid()+"";
final String text_title=shopBean.getData().get(position).getSalenum()+"";
final String text_price=shopBean.getData().get(position).getSubhead();
//点击事件回调
holder.image_01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clicklistener.dianjiclick(view,position,pid,text_price,text_title,image[0]);
}
});
}
@Override
public int getItemCount() {
return shopBean.getData() == null ? 0 : shopBean.getData().size();
}
class viewholder extends RecyclerView.ViewHolder {
private ImageView image_01;
private TextView text_title;
private TextView text_price;
public viewholder(View itemView) {
super(itemView);
image_01 = (ImageView) itemView.findViewById(R.id.image_01);
text_title = (TextView) itemView.findViewById(R.id.text_title);
text_price = (TextView) itemView.findViewById(R.id.text_price);
}
}
Clicklistener clicklistener;
public void setclick(Clicklistener clicklistener) {
this.clicklistener = clicklistener;
}
public interface Clicklistener {
public void dianjiclick(View view,int position,String pid,String text_title,String text_price,String image);
}
}
ShopMmodel
public class ShopMmodel implements Shopmodel {
@Override
public void getshopdta(Callback callback) {
OkHttp3Utils.doGet("http://120.27.23.105/product/searchProducts?keywords=%E6%89%8B%E6%9C%BA&page=1&source=android",callback);
}
}
Shopmodel
public interface Shopmodel {
public void getshopdta(Callback callback);
}
Shoppresnter
public class Shoppresnter {
Context context;
ShopView shopView;
ShopMmodel shopMmodel;
public Shoppresnter(Context context, ShopView shopView) {
this.context = context;
this.shopView = shopView;
shopMmodel = new ShopMmodel();
}
public void jsondata() {
shopMmodel.getshopdta(new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) {
Gson gson = new Gson();
ShopBean shopBean = gson.fromJson(result, ShopBean.class);
shopView.showshopview(shopBean);
}
});
}
//解绑的操作
public void death(){
shopView=null;
}
}
ShopView
public interface ShopView {
public void showshopview(ShopBean shopBean);
}
ModelCallBack
public interface ModelCallBack {
public void success(CartBean cartBean);
public void failure(Exception e);
}
MyModel
public class MyModel {
public void getData(final ModelCallBack modelCallBack){
String path = "https://www.zhaoapi.cn/product/getCarts?uid=3831&token=DED1DEF0B7287F1575BD92B817A6C742&source=android";
OkhttpUtils.getInstance().asy(null, path, new AbstractUiCallBack<CartBean>() {
@Override
public void success(CartBean cartBean) {
modelCallBack.success(cartBean);
}
@Override
public void fail(Exception e) {
modelCallBack.failure(e);
}
});
}
}
MyPresenter
public class MyPresenter {
MyModel myModel = new MyModel();
ViewCallBack viewCallBack;
public MyPresenter(ViewCallBack viewCallBack) {
this.viewCallBack = viewCallBack;
}
public void getData() {
myModel.getData(new ModelCallBack() {
@Override
public void success(CartBean cartBean) {
if (viewCallBack != null) {
viewCallBack.success(cartBean);
}
}
@Override
public void failure(Exception e) {
if (viewCallBack != null) {
viewCallBack.failure(e);
}
}
});
}
/**
* 防止内存泄露
*/
public void detach() {
viewCallBack = null;
}
}
RecyAdapter
public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.MyViewHolder> {
Context context;
private List<CartBean.DataBean.ListBean> list;
private Map<String, String> map = new HashMap<>();
public RecyAdapter(Context context) {
this.context = context;
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
}
/**
* 添加数据
*/
public void add(CartBean cartBean) {
if (list == null) {
list = new ArrayList<>();
}
for (CartBean.DataBean shop : cartBean.getData()) {
map.put(shop.getSellerid(), shop.getSellerName());
for (int i = 0; i < shop.getList().size(); i++) {
//添加到list集合里
list.add(shop.getList().get(i));
}
}
setFirst(list);
notifyDataSetChanged();
}
/**
* 设置数据源
*/
private void setFirst(List<CartBean.DataBean.ListBean> list) {
if (list.size() > 0) {
list.get(0).setIsFirst(1);
for (int i = 1; i < list.size(); i++) {
if (list.get(i).getSellerid() == list.get(i - 1).getSellerid()) {
list.get(i).setIsFirst(2);
} else {
list.get(i).setIsFirst(1);
if (list.get(i).isItem_check() == true) {
list.get(i).setShop_check(list.get(i).isItem_check());
}
}
}
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.recy_cart_item, null);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
/**
* 设置商铺显示或隐藏
* */
if (list.get(position).getIsFirst() == 1) {
holder.shop_checkbox.setVisibility(View.VISIBLE);
holder.shop_name.setVisibility(View.VISIBLE);
holder.shop_checkbox.setChecked(list.get(position).isShop_check());
holder.shop_name.setText(map.get(String.valueOf(list.get(position).getSellerid())));
} else {
holder.shop_name.setVisibility(View.GONE);
holder.shop_checkbox.setVisibility(View.GONE);
}
String[] split = list.get(position).getImages().split("\\|");
ImageLoader.getInstance().displayImage(split[0], holder.item_face);
holder.item_checkbox.setChecked(list.get(position).isItem_check());
holder.item_name.setText(list.get(position).getTitle());
holder.item_price.setText(list.get(position).getPrice() + "");
//调用customjiajian里面的方法设置 加减号中间的数字
holder.customJiaJian.setEditText(list.get(position).getNum());
//商铺的shop_checkbox点击事件 ,控制商品的item_checkbox
holder.shop_checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(position).setShop_check(holder.shop_checkbox.isChecked());
for (int i = 0; i < list.size(); i++) {
if (list.get(position).getSellerid() == list.get(i).getSellerid()) {
//当前条目的选中状态 设置成 当前商铺的选中状态
list.get(i).setItem_check(holder.shop_checkbox.isChecked());
}
}
notifyDataSetChanged();
sum(list);
}
});
holder.item_checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(position).setItem_check(holder.item_checkbox.isChecked());
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (list.get(i).getSellerid() == list.get(j).getSellerid() && !list.get(j).isItem_check()) {
list.get(i).setShop_check(false);
break;
} else {
list.get(i).setShop_check(true);
}
}
}
notifyDataSetChanged();
sum(list);
}
});
holder.item_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.remove(position);
setFirst(list);
sum(list);
notifyDataSetChanged();
}
});
holder.customJiaJian.setCustomListener(new CustomJiaJian.CustomListener() {
@Override
public void jiajian(int count) {
list.get(position).setNum(count);
notifyDataSetChanged();
sum(list);
}
@Override
//输入值 求总价
public void shuRuZhi(int count) {
list.get(position).setNum(count);
notifyDataSetChanged();
sum(list);
}
});
}
/**
* 计算总价的方法
*/
private void sum(List<CartBean.DataBean.ListBean> list) {
int totalNum = 0;
float totalMoney = 0.0f;
boolean allCheck = true;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).isItem_check()) {
totalNum += list.get(i).getNum();
totalMoney += list.get(i).getNum() * list.get(i).getPrice();
} else {
allCheck = false;
}
}
updateListener.setTotal(totalMoney + "", totalNum + "", allCheck);
}
public void quanXuan(boolean checked) {
for (int i = 0; i < list.size(); i++) {
list.get(i).setShop_check(checked);
list.get(i).setItem_check(checked);
}
notifyDataSetChanged();
sum(list);
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private final CheckBox shop_checkbox;
private final TextView shop_name;
private final CheckBox item_checkbox;
private final TextView item_name;
private final TextView item_price;
private final CustomJiaJian customJiaJian;
private final ImageView item_delete;
private final ImageView item_face;
public MyViewHolder(View itemView) {
super(itemView);
shop_checkbox = (CheckBox) itemView.findViewById(R.id.shop_checkbox);
shop_name = (TextView) itemView.findViewById(R.id.shop_name);
item_checkbox = (CheckBox) itemView.findViewById(R.id.item_checkbox);
item_name = (TextView) itemView.findViewById(R.id.item_name);
item_price = (TextView) itemView.findViewById(R.id.item_price);
customJiaJian = (CustomJiaJian) itemView.findViewById(R.id.custom_jiajian);
item_delete = (ImageView) itemView.findViewById(R.id.item_delete);
item_face = (ImageView) itemView.findViewById(R.id.item_face);
}
}
UpdateListener updateListener;
public void setUpdateListener(UpdateListener updateListener) {
this.updateListener = updateListener;
}
//接口
public interface UpdateListener {
public void setTotal(String total, String num, boolean allCheck);
}
}
ViewCallBack
public interface ViewCallBack {
public void success(CartBean cartBean);
public void failure(Exception e);
}
ImageLoaderUtils
public class ImageLoaderUtils {
public static DisplayImageOptions myInitOptions() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.cacheInMemory(true)
.cacheOnDisc(true)
.considerExifParams(true)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
.bitmapConfig(Bitmap.Config.RGB_565)
.resetViewBeforeLoading(true)
.build();
return options;
}
public static DisplayImageOptions myInitOptionsRadiu() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.cacheInMemory(true)
.cacheOnDisc(true)
.considerExifParams(true)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
.bitmapConfig(Bitmap.Config.RGB_565)
.resetViewBeforeLoading(true)
.displayer(new RoundedBitmapDisplayer(10))
.build();
return options;
}
}
LoggingInterceptor
public class LoggingInterceptor implements Interceptor {
private static final String UA = "User-Agent";
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader(UA, makeUA())
.build();
return chain.proceed(request);
}
private String makeUA() {
String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
}
}
OkHttp3Utils
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);
}
}
OkHttpUtils
public class OkHttpUtils {
private Handler handler=new Handler();
public Handler getHandler(){
return handler;
}
//单例
private static OkHttpUtils okHttpUtils=new OkHttpUtils();
private OkHttpUtils(){};
public static OkHttpUtils getInstance(){
return okHttpUtils;
}
private OkHttpClient client;
private void initOkHttpClient(){
if (client==null){
client=new OkHttpClient.Builder().build();
}
}
//公用的get请求方法 完成的功能不确定
public void doGet(String url, Callback callback){
initOkHttpClient();
Request request=new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
}
OnUiCallback
public abstract class OnUiCallback implements Callback {
private Handler handler=OkHttpUtils.getInstance().getHandler();
public abstract void onFailed(Call call,IOException e);
public abstract void onSuccess(String result);
@Override
public void onFailure(final Call call, final IOException e) {
//该方法就是把 线程post到handler所在的线程
handler.post(new Runnable() {
@Override
public void run() {
// e.getMessage()
onFailed(call,e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String result=response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
onSuccess(result);
}
});
}
}
util2
AbstractUiCallBack
public abstract class AbstractUiCallBack<T> implements Callback{
public abstract void success(T t);
public abstract void fail(Exception e);
private Handler handler = null;
private Class clazz;
public AbstractUiCallBack(){
handler = new Handler(Looper.getMainLooper());
Type type = getClass().getGenericSuperclass();
Type[] arr = ((ParameterizedType)type).getActualTypeArguments();
clazz = (Class) arr[0];
}
@Override
public void onFailure(Call call, IOException e) {
fail(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
String result = response.body().string();
Gson gson = new Gson();
final T t = (T) gson.fromJson(result,clazz);
handler.post(new Runnable() {
@Override
public void run() {
success(t);//成功的回调出去
}
});
}catch (Exception e){
e.printStackTrace();
fail(e);//失败的回调
}
}
}
IsInternet
public class IsInternet {
public static boolean isNetworkAvalible(Context context) {
// 获得网络状态管理器
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 建立网络数组
NetworkInfo[] net_info = connectivityManager.getAllNetworkInfo();
if (net_info != null) {
for (int i = 0; i < net_info.length; i++) {
// 判断获得的网络状态是否是处于连接状态
if (net_info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
// 如果没有网络,则弹出网络设置对话框
public static void checkNetwork(final Activity activity) {
if (!IsInternet.isNetworkAvalible(activity)) {
TextView msg = new TextView(activity);
msg.setText("当前没有可以使用的网络,请设置网络!");
new AlertDialog.Builder(activity)
.setIcon(R.mipmap.ic_launcher)
.setTitle("网络状态提示")
.setView(msg)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// 跳转到设置界面
activity.startActivityForResult(new Intent(
Settings.ACTION_WIRELESS_SETTINGS),
0);
}
}).create().show();
}
return;
}
}
MyInterceptor
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
//&source=android这个是get带参数
//?source=android 这个是只能get不带传参,还有就是post
String url = request.url().toString()+"?source=android";
Request request1 = request.newBuilder().url(url).build();
Response response = chain.proceed(request1);
return response;
}
}
OkhttpUtils
private static OkhttpUtils okhttpUtils = null;
private OkhttpUtils(){
}
public static OkHttpClient client;
public static OkhttpUtils getInstance(){
if(okhttpUtils==null){
okhttpUtils = new OkhttpUtils();
client = new OkHttpClient.Builder()
.readTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20,TimeUnit.SECONDS)
.connectTimeout(20,TimeUnit.SECONDS)
//.addInterceptor(new MyInterceptor())
.build();
}
return okhttpUtils;
}
public void asy(Map<String,String> params,String url,AbstractUiCallBack callBack){
Request request = null;
if(params!=null){
FormBody.Builder builder = new FormBody.Builder();
for(Map.Entry<String,String> entry : params.entrySet()){
builder.add(entry.getKey(),entry.getValue());
}
FormBody body = builder.build();
request = new Request.Builder()
.url(url)
.post(body)
.build();
}else{
request = new Request.Builder()
.url(url)
.build();
}
client.newCall(request).enqueue(callBack);
}
}
CustomJiaJian
public class CustomJiaJian extends LinearLayout {
private Button reverse;
private Button add;
private EditText countEdit;
private int mCount =1;
public CustomJiaJian(Context context) {
super(context);
}
public CustomJiaJian(Context context, AttributeSet attrs) {
super(context, attrs);
View view = View.inflate(context, R.layout.custom_jiajian,this);
reverse = (Button) view.findViewById(R.id.reverse);
add = (Button) view.findViewById(R.id.add);
countEdit = (EditText) view.findViewById(R.id.count);
reverse.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String content = countEdit.getText().toString().trim();
int count = Integer.valueOf(content);
if(count==1){
Toast.makeText(getContext(), "最小数量为1", Toast.LENGTH_SHORT).show();
}
if(count>1){
mCount = count-1;
countEdit.setText(mCount+"");
//回调给adapter里面
if(customListener!=null){
customListener.jiajian(mCount);
}
}
}
});
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String content = countEdit.getText().toString().trim();
int count = Integer.valueOf(content)+1;
mCount = count;
countEdit.setText(mCount+"");
//接口回调给adapter
if(customListener!=null){
customListener.jiajian(mCount);
}
}
});
}
public CustomJiaJian(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
CustomListener customListener;
public void setCustomListener(CustomListener customListener){
this.customListener = customListener;
}
//加减的接口
public interface CustomListener{
public void jiajian(int count);
public void shuRuZhi(int count);
}
//这个方法是供recyadapter设置 数量时候调用的
public void setEditText(int num) {
if(countEdit !=null) {
countEdit.setText(num + "");
}
}
}
CustomVideoView
public class CustomVideoView extends VideoView {
public CustomVideoView(Context context) {
super(context);
}
public CustomVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//我们重新计算高度
int width = getDefaultSize(0, widthMeasureSpec);
int height = getDefaultSize(0, heightMeasureSpec);
setMeasuredDimension(width, height);
}
@Override
public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
super.setOnPreparedListener(l);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
}
相关文章推荐
- 登录注册到数据展示到购物车布局
- andriod———1.实现原生登录注册。 2.首页完成商品列表展示点击相对应的商品ID进入商品详情 3.商品详情页面展示数据,点击加入购物车进入购物车页面 4.购物车页面完成购物车编辑,删除,功能
- MVP_注册登录 + 展示数据
- iOS实战演练之关于数据交互的问题(利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能)
- MVP注册登录+OkHttp网络请求+展示数据
- 注册登录展示数据
- 使用leancloud实现登录注册,数据存储,即使通讯等功能
- 网页注册登录判断 跳转 展示json串列表(自己用)
- Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties
- 登录注册界面前端代码
- vs2010 c# MySql 用户登录注册设计代码优化1
- Android用户登录注册界面开发及用户信息管理案例代码详解
- Android实现注册登录界面的实例代码
- discuz bbs注册,登录流程整理!想打通bbs又不想读一遍代码可以参考一下
- hibernate分页查询,在自己写的s2sh注册登录的基础上添加对数据表的分页显示功能
- Retrofit+RxJava+OkHttp封装类请求接口数据→原生登录,注册,个人信息页+设置用户头像(图片上传或拍照)+SharedPreferences保存信息+Fresco加载图片+Mvp分层
- 微信小程序服务器请求和上传数据,上传图片并展示,提交表单完整实例代码附效果图
- 登录 ,注册 界面实现 代码
- JAVA简单实现MD5注册登录加密实例代码
- 用户注册和用户登录简单代码