登录注册到展示数据到购物车代码





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;
    private 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);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值