登陆+购物车

  一些依赖

compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.facebook.fresco:fresco:1.5.0'
compile 'org.greenrobot:eventbus:3.1.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.youth.banner:banner:1.4.10'
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.7'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'fm.jiecao:jiecaovideoplayer:4.8.3'
   清单文件
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
android:name=".app.MyApplication"

<activity android:name=".ZhuActivity"></activity>
<activity android:name=".SesondActivity"></activity>
<activity android:name=".CarActivity"></activity>
<activity android:name=".XiangActivity"></activity>
             
      activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
   >

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_gravity="center_horizontal"
        android:id="@+id/main_sim"
        android:layout_width="150dp"
        android:layout_height="150dp"
        fresco:roundedCornerRadius="150dp"
        fresco:roundingBorderWidth="1dp"
        fresco:roundingBorderColor="#000000"
        fresco:placeholderImage="@mipmap/ic_launcher"
        />

    <EditText
        android:hint="请输入手机号"
        android:id="@+id/main_name"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:hint="请输入密码"
        android:id="@+id/main_pass"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/main_deng"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="登录"/>

        <Button
            android:id="@+id/tiao"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="新用户注册"/>
    </LinearLayout>
</LinearLayout>

activity_car.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_car"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
   >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:layout_weight="0"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/quan"
            android:layout_weight="0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="全选"/>

        <LinearLayout
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/liang"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/zong"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:text="不含运费"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <Button
            android:text="去支付"
            android:layout_width="wrap_content"
            android:layout_weight="0"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

activity_sesond.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_sesond"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
   >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/sesond_recy"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

activity_xiang.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_xiang"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/xiang_sim"
            android:layout_width="match_parent"
            android:layout_height="220dp" />

        <TextView
            android:id="@+id/xiang_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:textColor="#f00"
            android:id="@+id/xiang_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/xiang_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <Button
        android:id="@+id/xiang_btn"
        android:text="添加到购物车"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

activity_zhu.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_zhu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <EditText
        android:hint="请输入手机号"
        android:id="@+id/zhu_name"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:hint="请输入密码"
        android:id="@+id/zhu_pass"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <EditText
        android:hint="确认密码"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:hint="输入邮箱"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/zhu_btn"
        android:text="注册"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

layout_adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <CheckBox
            android:id="@+id/shop_check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/shop_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:layout_weight="0"
            android:id="@+id/check"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <ImageView
            android:id="@+id/shop_face"
            android:layout_width="100dp"
            android:layout_height="100dp" />

        <LinearLayout
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView
                android:id="@+id/shop_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/shop_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <com.example.dasd.myapplication.view.PlusView
                android:id="@+id/plusview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </LinearLayout>

        <Button
            android:id="@+id/del"
            android:text="删除"
            android:layout_weight="0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>
 

 layout_plus.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">


    <Button
        android:id="@+id/plus_lift"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:background="@drawable/minus2"/>

    <EditText
        android:id="@+id/plus_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/plus_right"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:background="@drawable/plus2"/>
</LinearLayout>


 layout_recy.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/recy_sim"
        android:layout_width="100dp"
        android:layout_height="100dp" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/recy_name"
            android:textSize="30dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/recy_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

MainActivity.java
package com.example.dasd.myapplication;

import android.content.Intent;
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.Toast;

import com.example.dasd.myapplication.bean.DengBean;
import com.example.dasd.myapplication.presenter.MyPresenter;
import com.facebook.drawee.view.SimpleDraweeView;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements MyPresenter.DengCallBack{

    @BindView(R.id.main_sim)
    SimpleDraweeView mainSim;
    @BindView(R.id.main_name)
    EditText mainName;
    @BindView(R.id.main_pass)
    EditText mainPass;
    @BindView(R.id.main_deng)
    Button mainDeng;
    @BindView(R.id.tiao)
    Button tiao;
    private MyPresenter myPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        myPresenter = new MyPresenter(this);

        mainDeng.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = mainName.getText().toString().trim();
                String pass = mainPass.getText().toString().trim();
                myPresenter.doDeng(name,pass);
            }
        });

        tiao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,ZhuActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    public void success(DengBean dengBean) {
        if(dengBean.getMsg().equals("登录成功")){
            Toast.makeText(MainActivity.this,dengBean.getMsg(),Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(MainActivity.this,SesondActivity.class);
            startActivity(intent);
        }
    }

    @Override
    public void failure() {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        myPresenter.xiaohui();
    }
}


                  CarActivity.java
package com.example.dasd.myapplication;

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 com.example.dasd.myapplication.adapter.MyAdapter;
import com.example.dasd.myapplication.bean.XinBean;
import com.example.dasd.myapplication.okhttp.AbstractUiCallBack;
import com.example.dasd.myapplication.okhttp.OkhttpUtils;
import com.example.dasd.myapplication.presenter.MyPresenter;

import butterknife.BindView;
import butterknife.ButterKnife;

public class CarActivity extends AppCompatActivity implements MyPresenter.PCarCallBack{

    @BindView(R.id.recycle)
    RecyclerView recycle;
    @BindView(R.id.quan)
    CheckBox quan;
    @BindView(R.id.liang)
    TextView liang;
    @BindView(R.id.zong)
    TextView zong;
    private MyAdapter myAdapter;
    private LinearLayoutManager manager;
    private MyPresenter myPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_car);
        ButterKnife.bind(this);

        myPresenter = new MyPresenter(this);
        //myPresenter.getCar();
        myAdapter = new MyAdapter(CarActivity.this);
        manager = new LinearLayoutManager(CarActivity.this,LinearLayoutManager.VERTICAL,false);



        myAdapter.setListener(new MyAdapter.UpdateUiListener() {
            @Override
            public void setTotal(String total, String num, boolean allcheck) {
                zong.setText(total);
                liang.setText(num);
                quan.setChecked(allcheck);
            }
        });

        quan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myAdapter.selectAll(quan.isChecked());
            }
        });

        OkhttpUtils.getInstance().asy(null, "http://120.27.23.105/product/getCarts?uid=3839", new AbstractUiCallBack<XinBean>() {
            @Override
            public void success(XinBean xinBean) {
                myAdapter.add(xinBean);
                recycle.setLayoutManager(manager);
                recycle.setAdapter(myAdapter);
            }

            @Override
            public void failure(Exception e) {

            }
        });
    }

    @Override
    public void success(XinBean xinBean) {
        myAdapter.add(xinBean);
        recycle.setLayoutManager(manager);
        recycle.setAdapter(myAdapter);
    }

    @Override
    public void failure() {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        myPresenter.xiaohui();
    }
}

    
              SesondActivity.java
package com.example.dasd.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.example.dasd.myapplication.adapter.RecyAdapter;
import com.example.dasd.myapplication.bean.XiangBean;
import com.example.dasd.myapplication.presenter.MyPresenter;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class SesondActivity extends AppCompatActivity implements MyPresenter.PXinCallBack{

    @BindView(R.id.sesond_recy)
    RecyclerView sesondRecy;
    private LinearLayoutManager manager;
    private MyPresenter myPresenter;
    private RecyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sesond);
        ButterKnife.bind(this);

        myPresenter = new MyPresenter(this);
        myPresenter.getXin();



    }


    @Override
    public void success(XiangBean xiangBean) {
        manager = new LinearLayoutManager(SesondActivity.this,LinearLayoutManager.VERTICAL,false);
        List<XiangBean.DataBean> data = xiangBean.getData();
        adapter = new RecyAdapter(SesondActivity.this,data);
        sesondRecy.setLayoutManager(manager);
        sesondRecy.setAdapter(adapter);

    }

    @Override
    public void failure() {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        myPresenter.xiaohui();
    }
}

 
                        XiangActivity.java
package com.example.dasd.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.example.dasd.myapplication.bean.EeBean;
import com.example.dasd.myapplication.bean.JiaBean;
import com.example.dasd.myapplication.okhttp.AbstractUiCallBack;
import com.example.dasd.myapplication.okhttp.OkhttpUtils;
import com.facebook.drawee.view.SimpleDraweeView;

import butterknife.BindView;
import butterknife.ButterKnife;

public class XiangActivity extends AppCompatActivity {

    @BindView(R.id.xiang_sim)
    SimpleDraweeView xiangSim;
    @BindView(R.id.xiang_name)
    TextView xiangName;
    @BindView(R.id.xiang_title)
    TextView xiangTitle;
    @BindView(R.id.xiang_price)
    TextView xiangPrice;
    @BindView(R.id.xiang_btn)
    Button xiangBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xiang);
        ButterKnife.bind(this);

        Intent intent = getIntent();
        final int pid = intent.getIntExtra("pid", 0);
        Toast.makeText(XiangActivity.this, pid + "", Toast.LENGTH_SHORT).show();

        OkhttpUtils.getInstance().asy(null, "http://120.27.23.105/product/getProductDetail?pid="+pid, new AbstractUiCallBack<EeBean>() {
            @Override
            public void success(EeBean eeBean) {
                xiangName.setText(eeBean.getSeller().getName());
                xiangTitle.setText(eeBean.getData().getTitle());
                xiangPrice.setText("价格是:¥"+eeBean.getData().getPrice());
                String[] split = eeBean.getData().getImages().split("\\|");
                xiangSim.setImageURI(split[0]);
            }

            @Override
            public void failure(Exception e) {

            }
        });

        xiangBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                OkhttpUtils.getInstance().asy(null, "http://120.27.23.105/product/addCart?uid=3839&pid=" + pid, new AbstractUiCallBack<JiaBean>() {
                    @Override
                    public void success(JiaBean jiaBean) {
                        Toast.makeText(XiangActivity.this,"加购成功",Toast.LENGTH_SHORT).show();
                        Intent intent1 = new Intent(XiangActivity.this,CarActivity.class);
                        startActivity(intent1);
                    }

                    @Override
                    public void failure(Exception e) {

                    }
                });
            }
        });

    }


}

                  ZhuActivity.java
package com.example.dasd.myapplication;

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.Toast;

import com.example.dasd.myapplication.bean.ZhuBean;
import com.example.dasd.myapplication.presenter.MyPresenter;

import butterknife.BindView;
import butterknife.ButterKnife;

public class ZhuActivity extends AppCompatActivity implements MyPresenter.ZhuCallBack{

    @BindView(R.id.zhu_name)
    EditText zhuName;
    @BindView(R.id.zhu_pass)
    EditText zhuPass;
    @BindView(R.id.zhu_btn)
    Button zhuBtn;
    private MyPresenter myPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zhu);
        ButterKnife.bind(this);

        myPresenter = new MyPresenter(this);
        zhuBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = zhuName.getText().toString().trim();
                String pass = zhuPass.getText().toString().trim();
                myPresenter.doZhu(name,pass);
            }
        });

    }

    @Override
    public void success(ZhuBean zhuBean) {
        if(zhuBean.getMsg().equals("注册成功")){
            Toast.makeText(ZhuActivity.this,zhuBean.getMsg(),Toast.LENGTH_SHORT).show();
            finish();
        }
    }

    @Override
    public void failure() {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        myPresenter.xiaohui();
    }
}


adapter 类

         MyAdapter.java
package com.example.dasd.myapplication.adapter;

import android.content.Context;
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.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.dasd.myapplication.R;
import com.example.dasd.myapplication.bean.DelBean;
import com.example.dasd.myapplication.bean.XinBean;
import com.example.dasd.myapplication.okhttp.AbstractUiCallBack;
import com.example.dasd.myapplication.okhttp.OkhttpUtils;
import com.example.dasd.myapplication.view.PlusView;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

/**
 * Created by d on 2017/12/21.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
    Context context;
    private List<String> ImageList = new ArrayList<>();
    private List<XinBean.DataBean.ListBean> list;
    Map<String,String> map = new Hashtable<>();
    public MyAdapter(Context context) {
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.layout_adapter, null);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        if(list.get(position).getIsFrist() == 1){
            //显示商家
            holder.shop_check.setVisibility(View.VISIBLE);
            holder.shop_name.setVisibility(View.VISIBLE);
            holder.shop_check.setChecked(list.get(position).isShopSelected());

//            显示商家的名称
//            list.get(position).getSellerid() 取到商家的id
//            map.get()取到 商家的名称
            holder.shop_name.setText(map.get(String.valueOf(list.get(position).getSellerid())));
        } else {
            holder.shop_check.setVisibility(View.GONE);
            holder.shop_name.setVisibility(View.GONE);
        }

        holder.shop_title.setText(list.get(position).getTitle());
        holder.shop_price.setText(list.get(position).getPrice()+"");
        holder.check.setChecked(list.get(position).isItemSelected());
        String images = list.get(position).getImages();
        String[] split = images.split("\\|");
        for(int i = 0;i<split.length;i++){
            ImageList.add(split[i]);
        }
        ImageLoader.getInstance().displayImage(ImageList.get(position),holder.shop_face);

        holder.plusview.setEditView(list.get(position).getNum());
        holder.del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                int pid = list.get(position).getPid();
                OkhttpUtils.getInstance().asy(null, "http://120.27.23.105/product/deleteCart?uid=3839&pid=" + pid, new AbstractUiCallBack<DelBean>() {
                    @Override
                    public void success(DelBean delBean) {
                        Toast.makeText(context,"删除成功",Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void failure(Exception e) {

                    }
                });
                list.remove(position);
                setFirst(list);
                notifyDataSetChanged();
                sum(list);
            }
        });

        holder.check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.get(position).setItemSelected(holder.check.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).isItemSelected()){
                            list.get(i).setShopSelected(false);
                            break;
                        }
                        else{
                            list.get(i).setShopSelected(true);
                        }
                    }
                }

                notifyDataSetChanged();
                sum(list);
            }
        });

        holder.plusview.setLinsenter(new PlusView.ClickLisenter() {
            @Override
            public void click(int count) {
                list.get(position).setNum(count);
                notifyDataSetChanged();
                sum(list);
            }
        });

        holder.shop_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.get(position).setShopSelected(holder.shop_check.isChecked());
                for(int i=0; i<list.size();i++){
                    if(list.get(position).getSellerid()==list.get(i).getSellerid()){
                        list.get(i).setItemSelected(holder.shop_check.isChecked());
                    }
                }

                notifyDataSetChanged();
                sum(list);
            }
        });
    }

    public void sum(List<XinBean.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).isItemSelected()){
                totalNum += list.get(i).getNum();
                totalMoney += list.get(i).getPrice()*list.get(i).getNum();
            }
            else{
                allcheck = false;
            }
        }

        listener.setTotal(totalMoney+"",totalNum+"",allcheck);
    }

    public void setFirst(List<XinBean.DataBean.ListBean> list){
        if(list.size()>0){
            list.get(0).setIsFrist(1);
            for(int i = 1;i<list.size();i++){
                if(list.get(i).getSellerid()==list.get(i-1).getSellerid()){
                    list.get(i).setIsFrist(2);
                }
                else{
                    list.get(i).setIsFrist(1);
                }
            }
        }
    }

    @Override
    public int getItemCount() {
        return list==null ? 0 : list.size();
    }

    public void add(XinBean xinBean) {
        if(list==null){
            list = new ArrayList<>();
        }
        for(XinBean.DataBean shop:xinBean.getData()){
            map.put(shop.getSellerid(),shop.getSellerName());
            for(int i = 0; i<shop.getList().size();i++){
                list.add(shop.getList().get(i));
            }
        }

        setFirst(list);
        notifyDataSetChanged();
    }

    public void selectAll(boolean checked) {
        for(int i = 0;i<list.size();i++){
            list.get(i).setShopSelected(checked);
            list.get(i).setItemSelected(checked);
        }

        notifyDataSetChanged();
        sum(list);
    }

    static class ViewHolder extends RecyclerView.ViewHolder{

        private final CheckBox shop_check;
        private final ImageView shop_face;
        private final TextView shop_name;
        private final TextView shop_price;
        private final TextView shop_title;
        private final PlusView plusview;
        private final CheckBox check;
        private final Button del;

        public ViewHolder(View itemView) {
            super(itemView);

            shop_check = (CheckBox) itemView.findViewById(R.id.shop_check);
            shop_face = (ImageView) itemView.findViewById(R.id.shop_face);
            shop_name = (TextView) itemView.findViewById(R.id.shop_name);
            shop_price = (TextView) itemView.findViewById(R.id.shop_price);
            shop_title = (TextView) itemView.findViewById(R.id.shop_title);
            plusview = (PlusView) itemView.findViewById(R.id.plusview);
            check = (CheckBox) itemView.findViewById(R.id.check);
            del = (Button) itemView.findViewById(R.id.del);
        }
    }

    UpdateUiListener listener;
    public void setListener(UpdateUiListener listener){
        this.listener = listener;
    }

    public interface UpdateUiListener{
        public void setTotal(String total, String num, boolean allcheck);
    }
}


adapter类
               RecyAdapter.java
package com.example.dasd.myapplication.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.dasd.myapplication.R;
import com.example.dasd.myapplication.XiangActivity;
import com.example.dasd.myapplication.bean.XiangBean;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

/**
 * Created by d on 2017/12/21.
 */

public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.IViewHolder>{

    Context context;
    List<XiangBean.DataBean> data;


    public RecyAdapter(Context context, List<XiangBean.DataBean> data) {
       this.context = context;
        this.data = data;
    }



    @Override
    public IViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.layout_recy, null);
        return new IViewHolder(view);
    }

    @Override
    public void onBindViewHolder(IViewHolder holder, final int position) {
        holder.recy_name.setText(data.get(position).getPid()+"");
        holder.recy_title.setText(data.get(position).getTitle());
        String[] split = data.get(position).getImages().split("\\|");
        holder.simpleDraweeView.setImageURI(split[0]);

        holder.recy_title.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int pid = data.get(position).getPid();
                Intent intent = new Intent(context, XiangActivity.class);
                intent.putExtra("pid",pid);
                context.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return data==null ? 0 : data.size();
    }

    static class IViewHolder extends RecyclerView.ViewHolder{

        private final TextView recy_name;
        private final TextView recy_title;
        private final SimpleDraweeView simpleDraweeView;

        public IViewHolder(View itemView) {
            super(itemView);

            recy_name = (TextView) itemView.findViewById(R.id.recy_name);
            recy_title = (TextView) itemView.findViewById(R.id.recy_title);
            simpleDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.recy_sim);
        }
    }

}

app包
             MyApplication.java
package com.example.dasd.myapplication.app;

import android.app.Application;

import com.example.dasd.myapplication.jiekou.DoGitModel;
import com.example.dasd.myapplication.okhttp.Okhttp;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by d on 2017/12/21.
 */

public class MyApplication extends Application{

    public static DoGitModel doGitModel;

    @Override
    public void onCreate() {
        super.onCreate();

        Fresco.initialize(this);
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader.getInstance().init(configuration);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://120.27.23.105")
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(Okhttp.getinstaince())
                .build();

        doGitModel = retrofit.create(DoGitModel.class);
    }
}

bean包
     DelBean.java
package com.example.dasd.myapplication.bean;

/**
 * Created by d on 2017/12/21.
 */

public class DelBean {

    /**
     * msg : 删除购物车成功
     * code : 0
     */

    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}

          DengBean.java
package com.example.dasd.myapplication.bean;

/**
 * Created by d on 2017/12/21.
 */

public class DengBean {


    /**
     * msg : 登录成功
     * code : 0
     * data : {"age":null,"appkey":"7307f2c2f372acaf","appsecret":"0B598BF9CBFEDE9284D22701B8C943DA","createtime":"2017-12-21T13:53:01","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"13555025485","money":null,"nickname":null,"password":"29B2504F76D2E9C177B4A8D2263921B9","praiseNum":null,"token":"0B6C8E548C65855B5B425113772361C8","uid":3839,"userId":null,"username":"13555025485"}
     */

    private String msg;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * age : null
         * appkey : 7307f2c2f372acaf
         * appsecret : 0B598BF9CBFEDE9284D22701B8C943DA
         * createtime : 2017-12-21T13:53:01
         * email : null
         * fans : null
         * follow : null
         * gender : null
         * icon : null
         * latitude : null
         * longitude : null
         * mobile : 13555025485
         * money : null
         * nickname : null
         * password : 29B2504F76D2E9C177B4A8D2263921B9
         * praiseNum : null
         * token : 0B6C8E548C65855B5B425113772361C8
         * uid : 3839
         * userId : null
         * username : 13555025485
         */

        private Object age;
        private String appkey;
        private String appsecret;
        private String createtime;
        private Object email;
        private Object fans;
        private Object follow;
        private Object gender;
        private Object icon;
        private Object latitude;
        private Object longitude;
        private String mobile;
        private Object money;
        private Object nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int uid;
        private Object userId;
        private String username;

        public Object getAge() {
            return age;
        }

        public void setAge(Object age) {
            this.age = age;
        }

        public String getAppkey() {
            return appkey;
        }

        public void setAppkey(String appkey) {
            this.appkey = appkey;
        }

        public String getAppsecret() {
            return appsecret;
        }

        public void setAppsecret(String appsecret) {
            this.appsecret = appsecret;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public Object getEmail() {
            return email;
        }

        public void setEmail(Object email) {
            this.email = email;
        }

        public Object getFans() {
            return fans;
        }

        public void setFans(Object fans) {
            this.fans = fans;
        }

        public Object getFollow() {
            return follow;
        }

        public void setFollow(Object follow) {
            this.follow = follow;
        }

        public Object getGender() {
            return gender;
        }

        public void setGender(Object gender) {
            this.gender = gender;
        }

        public Object getIcon() {
            return icon;
        }

        public void setIcon(Object icon) {
            this.icon = icon;
        }

        public Object getLatitude() {
            return latitude;
        }

        public void setLatitude(Object latitude) {
            this.latitude = latitude;
        }

        public Object getLongitude() {
            return longitude;
        }

        public void setLongitude(Object longitude) {
            this.longitude = longitude;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public Object getMoney() {
            return money;
        }

        public void setMoney(Object money) {
            this.money = money;
        }

        public Object getNickname() {
            return nickname;
        }

        public void setNickname(Object nickname) {
            this.nickname = nickname;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Object getPraiseNum() {
            return praiseNum;
        }

        public void setPraiseNum(Object praiseNum) {
            this.praiseNum = praiseNum;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public int getUid() {
            return uid;
        }

        public void setUid(int uid) {
            this.uid = uid;
        }

        public Object getUserId() {
            return userId;
        }

        public void setUserId(Object userId) {
            this.userId = userId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
}

          EeBean.java
package com.example.dasd.myapplication.bean;

/**
 * Created by d on 2017/12/21.
 */

public class EeBean {


    /**
     * msg :
     * seller : {"description":"我是商家21","icon":"http://120.27.23.105/images/icon.png","name":"商家21","productNums":999,"score":5,"sellerid":21}
     * code : 0
     * data : {"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":77,"price":38999.99,"pscid":40,"salenum":7757,"sellerid":21,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}
     */

    private String msg;
    private SellerBean seller;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public SellerBean getSeller() {
        return seller;
    }

    public void setSeller(SellerBean seller) {
        this.seller = seller;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class SellerBean {
        /**
         * description : 我是商家21
         * icon : http://120.27.23.105/images/icon.png
         * name : 商家21
         * productNums : 999
         * score : 5.0
         * sellerid : 21
         */

        private String description;
        private String icon;
        private String name;
        private int productNums;
        private double score;
        private int sellerid;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getIcon() {
            return icon;
        }

        public void setIcon(String icon) {
            this.icon = icon;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getProductNums() {
            return productNums;
        }

        public void setProductNums(int productNums) {
            this.productNums = productNums;
        }

        public double getScore() {
            return score;
        }

        public void setScore(double score) {
            this.score = score;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
    }

    public static class DataBean {
        /**
         * bargainPrice : 11800.0
         * createtime : 2017-10-14T21:48:08
         * detailUrl : https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1
         * images : https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg
         * itemtype : 2
         * pid : 77
         * price : 38999.99
         * pscid : 40
         * salenum : 7757
         * sellerid : 21
         * subhead : 购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)
         * title : 全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G
         */

        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private double price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}

                 JiaBean.java
package com.example.dasd.myapplication.bean;

/**
 * Created by d on 2017/12/21.
 */

public class JiaBean {


    /**
     * msg : 加购成功
     * code : 0
     */

    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}

              XiangBean.java

package com.example.dasd.myapplication.bean;

import java.util.List;

/**
 * Created by d on 2017/12/21.
 */

public class XiangBean {


    /**
     * msg : 查询成功
     * code : 0
     * data : [{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","itemtype":0,"pid":57,"price":5199,"pscid":40,"salenum":4343,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银\r\n"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/5025518.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8830/106/1760940277/195595/5cf9412f/59bf2ef5N5ab7dc16.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5428/70/1520969931/274676/b644dd0d/591128e7Nd2f70da0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5566/365/1519564203/36911/620c750c/591128eaN54ac3363.jpg!q70.jpg","itemtype":1,"pid":58,"price":6399,"pscid":40,"salenum":545,"sellerid":2,"subhead":"升级4G大显存!Nvme协议Pcie SSD,速度快人一步】GTX1050Ti就选拯救者!专业游戏键盘&新模具全新设计!","title":"联想(Lenovo)拯救者R720 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 1T+128G SSD GTX1050Ti 4G IPS 黑)"},{"bargainPrice":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","itemtype":0,"pid":59,"price":5599,"pscid":40,"salenum":675,"sellerid":3,"subhead":"游戏本选择4G独显,拒绝掉帧】升级版IPS全高清防眩光显示屏,WASD方向键颜色加持,三大出风口立体散热!","title":"戴尔DELL灵越游匣15PR-6648B GTX1050 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 128GSSD+1T 4G独显 IPS)黑"},{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":60,"price":13888,"pscid":40,"salenum":466,"sellerid":4,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":61,"price":14999,"pscid":40,"salenum":5535,"sellerid":5,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":62,"price":15999,"pscid":40,"salenum":43,"sellerid":6,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":63,"price":10000,"pscid":40,"salenum":3232,"sellerid":7,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:43:53","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":64,"price":11000,"pscid":40,"salenum":0,"sellerid":8,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":65,"price":12000,"pscid":40,"salenum":868,"sellerid":9,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":66,"price":13000,"pscid":40,"salenum":7676,"sellerid":10,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}]
     * page : 1
     */

    private String msg;
    private String code;
    private String page;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * bargainPrice : 11800.0
         * createtime : 2017-10-10T17:33:37
         * detailUrl : https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
         * images : https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg
         * itemtype : 0
         * pid : 57
         * price : 5199.0
         * pscid : 40
         * salenum : 4343
         * sellerid : 1
         * subhead : 【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统
         * title : 小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银

         */

        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private double price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}

                     XinBean.java
package com.example.dasd.myapplication.bean;

import java.util.List;

/**
 * Created by d on 2017/12/21.
 */

public class XinBean {


    /**
     * msg : 请求成功
     * code : 0
     * data : [{},{"list":[{"bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","num":1,"pid":45,"price":2999,"pscid":39,"selected":0,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"}],"sellerName":"商家1","sellerid":"1"},{"list":[{"bargainPrice":1599,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/1993026402.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t5863/302/8961270302/97126/41feade1/5981c81cNc1b1fbef.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7003/250/1488538438/195825/53bf31ba/5981c57eN51e95176.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5665/100/8954482513/43454/418611a9/5981c57eNd5fc97ba.jpg!q70.jpg","num":1,"pid":47,"price":111,"pscid":39,"selected":0,"sellerid":3,"subhead":"碳黑色 32GB 全网通 官方标配   1件","title":"锤子 坚果Pro 特别版 巧克力色 酒红色 全网通 移动联通电信4G手机 双卡双待 碳黑色 32GB 全网通"}],"sellerName":"商家3","sellerid":"3"},{"list":[{"bargainPrice":3455,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","num":1,"pid":55,"price":5999,"pscid":39,"selected":0,"sellerid":11,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"}],"sellerName":"商家11","sellerid":"11"}]
     */

    private String msg;
    private String code;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * list : [{"bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","num":1,"pid":45,"price":2999,"pscid":39,"selected":0,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"}]
         * sellerName : 商家1
         * sellerid : 1
         */

        private String sellerName;
        private String sellerid;
        private List<ListBean> list;

        public String getSellerName() {
            return sellerName;
        }

        public void setSellerName(String sellerName) {
            this.sellerName = sellerName;
        }

        public String getSellerid() {
            return sellerid;
        }

        public void setSellerid(String sellerid) {
            this.sellerid = sellerid;
        }

        public List<ListBean> getList() {
            return list;
        }

        public void setList(List<ListBean> list) {
            this.list = list;
        }

        public static class ListBean {
            /**
             * bargainPrice : 99.0
             * createtime : 2017-10-14T21:38:26
             * detailUrl : https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
             * images : https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg
             * num : 1
             * pid : 45
             * price : 2999.0
             * pscid : 39
             * selected : 0
             * sellerid : 1
             * subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!
             * title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机
             */

            private double bargainPrice;
            private String createtime;
            private String detailUrl;
            private String images;
            private int num;
            private int pid;
            private double price;
            private int pscid;
            private int selected;
            private int sellerid;
            private String subhead;
            private String title;
            private int isFrist;   //是否选中商家
            public boolean shopSelected;  //商家多选是否选中
            public boolean itemSelected;   //条目多选是否选中

            public int getIsFrist() {
                return isFrist;
            }

            public void setIsFrist(int isFrist) {
                this.isFrist = isFrist;
            }

            public boolean isShopSelected() {
                return shopSelected;
            }

            public void setShopSelected(boolean shopSelected) {
                this.shopSelected = shopSelected;
            }

            public boolean isItemSelected() {
                return itemSelected;
            }

            public void setItemSelected(boolean itemSelected) {
                this.itemSelected = itemSelected;
            }

            public double getBargainPrice() {
                return bargainPrice;
            }

            public void setBargainPrice(double bargainPrice) {
                this.bargainPrice = bargainPrice;
            }

            public String getCreatetime() {
                return createtime;
            }

            public void setCreatetime(String createtime) {
                this.createtime = createtime;
            }

            public String getDetailUrl() {
                return detailUrl;
            }

            public void setDetailUrl(String detailUrl) {
                this.detailUrl = detailUrl;
            }

            public String getImages() {
                return images;
            }

            public void setImages(String images) {
                this.images = images;
            }

            public int getNum() {
                return num;
            }

            public void setNum(int num) {
                this.num = num;
            }

            public int getPid() {
                return pid;
            }

            public void setPid(int pid) {
                this.pid = pid;
            }

            public double getPrice() {
                return price;
            }

            public void setPrice(double price) {
                this.price = price;
            }

            public int getPscid() {
                return pscid;
            }

            public void setPscid(int pscid) {
                this.pscid = pscid;
            }

            public int getSelected() {
                return selected;
            }

            public void setSelected(int selected) {
                this.selected = selected;
            }

            public int getSellerid() {
                return sellerid;
            }

            public void setSellerid(int sellerid) {
                this.sellerid = sellerid;
            }

            public String getSubhead() {
                return subhead;
            }

            public void setSubhead(String subhead) {
                this.subhead = subhead;
            }

            public String getTitle() {
                return title;
            }

            public void setTitle(String title) {
                this.title = title;
            }
        }
    }
}


                         ZhuBean.java
package com.example.dasd.myapplication.bean;

/**
 * Created by d on 2017/12/21.
 */

public class ZhuBean {


    /**
     * msg : 注册成功
     * code : 0
     */

    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}
新建一个包 jiekou

                   新建这个接口DoGitModel
package com.example.dasd.myapplication.jiekou;


import com.example.dasd.myapplication.bean.DengBean;
import com.example.dasd.myapplication.bean.XiangBean;
import com.example.dasd.myapplication.bean.XinBean;
import com.example.dasd.myapplication.bean.ZhuBean;

import java.util.Map;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.QueryMap;

/**
 * Created by d on 2017/12/21.
 */

public interface DoGitModel {
    @GET("/user/login")
    Observable<DengBean> gitDeng(@QueryMap Map<String, String> map);

    @GET("/user/reg")
    Observable<ZhuBean> gitDZhu(@QueryMap Map<String, String> map);

    @GET("/product/getCarts")
    Observable<XinBean> gitXin(@QueryMap Map<String, String> map);

    @GET("/product/searchProducts")
    Observable<XiangBean> gitXiang(@QueryMap Map<String, String> map);
}

新建一个model包

              MyModel.java
package com.example.dasd.myapplication.model;


import com.example.dasd.myapplication.app.MyApplication;
import com.example.dasd.myapplication.bean.DengBean;
import com.example.dasd.myapplication.bean.XiangBean;
import com.example.dasd.myapplication.bean.XinBean;
import com.example.dasd.myapplication.bean.ZhuBean;

import java.util.Hashtable;
import java.util.Map;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

/**
 * Created by d on 2017/12/21.
 */

public class MyModel {

    public void doDeng(String name, String pass, final MDengCallBack mDengCallBack){
        Map<String,String> map = new Hashtable<>();
        map.put("mobile",name);
        map.put("password",pass);
        MyApplication.doGitModel.gitDeng(map)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<DengBean>() {
                    @Override
                    public void accept(DengBean dengBean) throws Exception {
                        mDengCallBack.success(dengBean);
                    }
                });
    }

    public void doZhu(String name, String pass, final MZhuCallBack mZhuCallBack){
        Map<String,String> map = new Hashtable<>();
        map.put("mobile",name);
        map.put("password",pass);
        MyApplication.doGitModel.gitDZhu(map)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<ZhuBean>() {
                    @Override
                    public void accept(ZhuBean zhuBean) throws Exception {
                        mZhuCallBack.success(zhuBean);
                    }
                });
    }

    public void getXin(final MXinCallBack mXinCallBack){
        Map<String,String> map = new Hashtable<>();
        map.put("keywords","笔记本");
        map.put("page","1");
        MyApplication.doGitModel.gitXiang(map)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<XiangBean>() {
                    @Override
                    public void accept(XiangBean xiangBean) throws Exception {
                        mXinCallBack.success(xiangBean);
                    }
                });
    }

    public void getCar(final MCarCallBack carCallBack){
        Map<String,String> map = new Hashtable<>();
        map.put("uid","3839");
        MyApplication.doGitModel.gitXin(map)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<XinBean>() {
                    @Override
                    public void accept(XinBean xinBean) throws Exception {
                        carCallBack.success(xinBean);
                    }
                });
    }

    public interface MDengCallBack{
        public void success(DengBean dengBean);
        public void failure();
    }

    public interface MZhuCallBack{
        public void success(ZhuBean zhuBean);
        public void failure();
    }

    public interface MXinCallBack{
        public void success(XiangBean xiangBean);
        public void failure();
    }

    public interface MCarCallBack{
        public void success(XinBean xinBean);
        public void failure();
    }
}

新建一个okhttp包
          AbstractUiCallBack.java
package com.example.dasd.myapplication.okhttp;

import android.os.Handler;
import android.os.Looper;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

/**
 * Created by muhanxi on 17/11/10.
 *
 *  * Okhttp 单例 范型的封装
 */

public  abstract  class AbstractUiCallBack<T> implements Callback {

    /**
     * 成功回调
     * @param t
     */
    public abstract void success(T t);

    /**
     * 失败回调
     * @param e
     */
    public abstract void failure(Exception e);


    private Handler handler = null ;
    private Class clazz ;

    public AbstractUiCallBack(){
        handler = new Handler(Looper.getMainLooper());


        //  得到的是一个 AbstractUiCallBack<T> 的Type
       Type type =  getClass().getGenericSuperclass() ;

        // 得到的是T的实际Type
       Type [] arr =  ((ParameterizedType)type).getActualTypeArguments() ;

        clazz = (Class) arr[0] ;



    }




    @Override
    public void onFailure(Call call, IOException e) {

        failure(e);

    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {


        try {
            String result = response.body().string();
            System.out.println("result = " + result);
            Gson gson = new Gson();

            final T t = (T) gson.fromJson(result,clazz);

            handler.post(new Runnable() {
                @Override
                public void run() {
                    success(t);
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
            failure(e);
        } catch (JsonSyntaxException e) {
            e.printStackTrace();
            failure(e);
        }


    }
}

okhttp包下
     LoggingInterceptor.java
package com.example.dasd.myapplication.okhttp;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * 可以实现 添加公共请求参数
 */
public class LoggingInterceptor implements Interceptor {


  @Override public Response intercept(Chain chain) throws IOException {
    //首先取到Request
    Request request = chain.request();
    Response response = null;
    Request requestProcess = null ;
    if("GET".equals(request.method())){
      String url =  request.url().toString() + "&source=android";
      Request.Builder builder =  request.newBuilder() ;
      builder.get().url(url);
      requestProcess =  builder.build();
      response = chain.proceed(requestProcess);
    } else {
      FormBody.Builder builder = new FormBody.Builder() ;
      RequestBody requestBody =  request.body() ;
      if(requestBody instanceof FormBody){
        FormBody formBody = (FormBody)requestBody ;
        for (int i=0;i<formBody.size();i++){
          builder.add(formBody.encodedName(i),formBody.encodedValue(i));
        }
        builder.add("source","android");
      }
       requestProcess =  request.newBuilder().url(request.url().toString()).post(builder.build()).build() ;
      response = chain.proceed(requestProcess);
    }




    return response;
  }
}

ookhttp包下

             Okhttp.java
package com.example.dasd.myapplication.okhttp;

import okhttp3.OkHttpClient;

/**
 * Created by d on 2017/12/21.
 */

public class Okhttp {

    private static OkHttpClient client = null;

    public static OkHttpClient getinstaince(){
        if(client==null){
            synchronized (Okhttp.class){
                if(client==null){
                    client = new OkHttpClient.Builder().build();
                }
            }
        }
        return client;
    }
}

okhttp包下
        OkhttpUtils.java
package com.example.dasd.myapplication.okhttp;

import java.io.File;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

/**
 * Created by muhanxi on 17/11/10.
 *
 *
 * Okhttp 单例 范型的封装
 */

public class OkhttpUtils {






    private static OkhttpUtils okhttpUtils = null ;

    private OkhttpUtils(){

    }

    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 LoggingInterceptor())
                    .build();
        }
        return okhttpUtils ;

    }


    private static OkHttpClient client ;


    /**
     * 发起异步请求
     * @param params
     * @param url
     * @param callBack
     */
    public void asy(Map<String,String> params,String url,AbstractUiCallBack callBack){
        Request request = null ;

        if(params != null){
            // post 请求
            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 {
            // get 请求
            request = new Request.Builder()
                    .url(url)
                    .build();
        }



        client.newCall(request).enqueue(callBack);

    }

    private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");


    public static void postFile(Map<String,String> map, String url, File file,AbstractUiCallBack callBack){

        String [] array =  file.getAbsolutePath().split("\\/");

        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);

        for(Map.Entry<String,String> entry : map.entrySet()){
            builder.addFormDataPart(entry.getKey(),entry.getValue());
        }
        builder.addFormDataPart("imageFileName",array[array.length-1]);


        if(file.exists() && file.length() > 0){
            builder.addFormDataPart("image",array[array.length-1], RequestBody.create(MEDIA_TYPE_PNG,file));
        }
        MultipartBody body =  builder.build() ;

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        client.newCall(request).enqueue(callBack);


    }

}

       presenteer包
MyPresenter.java


package com.example.dasd.myapplication.presenter;


import com.example.dasd.myapplication.bean.DengBean;
import com.example.dasd.myapplication.bean.XiangBean;
import com.example.dasd.myapplication.bean.XinBean;
import com.example.dasd.myapplication.bean.ZhuBean;
import com.example.dasd.myapplication.model.MyModel;

/**
 * Created by d on 2017/12/21.
 */

public class MyPresenter {
    DengCallBack dengCallBack;
    public MyPresenter(DengCallBack dengCallBack){
        this.dengCallBack = dengCallBack;
    }
    ZhuCallBack zhuCallBack;
    public MyPresenter(ZhuCallBack zhuCallBack){
        this.zhuCallBack = zhuCallBack;
    }
    PXinCallBack pXinCallBack;
    public MyPresenter(PXinCallBack pXinCallBack){
                this.pXinCallBack = pXinCallBack;
    }
    PCarCallBack carCallBack;
    public MyPresenter(PCarCallBack carCallBack){
        this.carCallBack = carCallBack;
    }

    MyModel myModel = new MyModel();
    public void doDeng(String name,String pass){
        myModel.doDeng(name, pass, new MyModel.MDengCallBack() {
            @Override
            public void success(DengBean dengBean) {
                dengCallBack.success(dengBean);
            }

            @Override
            public void failure() {

            }
        });
    }

    public void doZhu(String name,String pass){
        myModel.doZhu(name, pass, new MyModel.MZhuCallBack() {
            @Override
            public void success(ZhuBean zhuBean) {
                zhuCallBack.success(zhuBean);
            }

            @Override
            public void failure() {

            }
        });
    }

    public void getXin(){
        myModel.getXin(new MyModel.MXinCallBack() {
            @Override
            public void success(XiangBean xiangBean) {
                pXinCallBack.success(xiangBean);
            }

            @Override
            public void failure() {

            }
        });
    }

    public void getCar(){
        myModel.getCar(new MyModel.MCarCallBack() {
            @Override
            public void success(XinBean xinBean) {
                carCallBack.success(xinBean);
            }

            @Override
            public void failure() {

            }
        });
    }

    public interface DengCallBack{
        public void success(DengBean dengBean);
        public void failure();
    }

    public interface ZhuCallBack{
        public void success(ZhuBean zhuBean);
        public void failure();
    }

    public interface PXinCallBack{
        public void success(XiangBean xiangBean);
        public void failure();
    }

    public interface PCarCallBack{
        public void success(XinBean xinBean);
        public void failure();
    }

    public void xiaohui(){
        zhuCallBack = null;
        dengCallBack =null;
        myModel = null;
    }
}

view包
           PlusView.java
package com.example.dasd.myapplication.view;

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.Toast;

import com.example.dasd.myapplication.R;


/**
 * Created by d on 2017/12/21.
 */

public class PlusView extends LinearLayout{
    private EditText editText;
    private Button add;
    private Button revserse;
    private int mCount = 1;
    public PlusView(Context context) {
        super(context);
    }

    public PlusView(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view = View.inflate(context, R.layout.layout_plus, null);
        editText = (EditText) view.findViewById(R.id.plus_edit);
        revserse = (Button) view.findViewById(R.id.plus_lift);
        add = (Button) view.findViewById(R.id.plus_right);

        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                String trim = editText.getText().toString().trim();
                int count = Integer.valueOf(trim)+1;
                mCount = count;
                editText.setText(count+"");
                if(linsenter !=null){
                    linsenter.click(count);
                }
            }
        });

        revserse.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                String trim = editText.getText().toString().trim();
                int count = Integer.valueOf(trim);
                if(count>1){
                    count--;
                    mCount = count;
                    editText.setText(count+"");
                }
                else{
                    Toast.makeText(getContext(),"最小数量为1",Toast.LENGTH_SHORT).show();
                }
                if(linsenter!=null){
                    linsenter.click(count);
                }
            }
        });

        addView(view);
    }

    public void setEditView(int num){
        if(editText!=null){
            editText.setText(num+"");
        }
    }

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

    ClickLisenter linsenter;
    public void setLinsenter(ClickLisenter linsenter){
        this.linsenter = linsenter;
    }


    public interface ClickLisenter{
        public void click(int count);
    }
}






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值