登录+注册+详情Retrofit+Rxjava

依赖

compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile "io.reactivex.rxjava2:rxjava:2.1.10"
compile 'io.reactivex.rxjava2:rxandroid:2.0.2'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.jcodecraeer:xrecyclerview:1.5.8'
compile 'com.facebook.fresco:fresco:0.12.0'

http包

public class HttpConfig {
    public static String base_url="http://120.27.23.105/";
}

工具类

public class RetrofitUtil {
    //单例模式
    private static RetrofitUtil retrofitUtil;
    private final Retrofit retrofit;

    public static RetrofitUtil getInstance(){
        if (retrofitUtil==null){
            retrofitUtil=new RetrofitUtil();
        }
        return retrofitUtil;
    }

    //初始化retrofit
        public RetrofitUtil(){
            retrofit = new Retrofit.Builder()
                    .baseUrl(HttpConfig.base_url)
                    .addConverterFactory(GsonConverterFactory.create(new Gson()))
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build();
        }
        public <T> T createService(Class<T> t){
            T t1 = retrofit.create(t);
            return t1;
        }
}

服务类

public interface MyService {
    //登录
    @FormUrlEncoded
    @POST("user/login")
    Observable<LoginBean> loginPost(@FieldMap Map<String,String> map);
    //注册
    @FormUrlEncoded
    @POST("user/reg")
    Observable<RegBean> regPost(@FieldMap Map<String,String> map);
    //商品列表
    @GET("product/getProducts")
    Observable<GoodsBean> goodListData(@Query("pscid") String pscid,@Query("page") String page);
    //商品详情
    @GET("product/getProductDetail")
    Observable<DetailBean> goodDetailBean(@FieldMap Map<String,String> map);
    //添加购物车
    @GET("product/addCart")
    Observable<AddCartBean> addCart(@Query("uid") String uid,@Query("pid") String pid,@Query("source") String source);
    //获取购物车
    @FormUrlEncoded
    @POST("product/getCarts")
    Observable<CartGoodBean> getCartGood(@FieldMap Map<String,String> map);
}

model层

public interface IModel {
    //登录
    void login(Map<String,String> map);
    //注册
    void reg(Map<String,String> map);
    //获取商品列表
    void getGoodsListData(String pscid,String page);

    void getGoodsListFresh(String pscid,String page);

    void getGoodsListLoadMore(String pscid,String page);

    //获取商品详情
    void getGoodsDetail(DetailBean.DataBean dataBean);
    //添加购物车
    void addCart(String uid,String pid,String source);
    //获取购物车列表
    void getCart(Map<String,String> map);

}

m实现类

public class ModelImpl implements IModel {
    private IPresenter iPresenter;
    private static final String TAG = "ModelImpl======";
    public ModelImpl(IPresenter iPresenter) {
        this.iPresenter = iPresenter;
    }

    @Override
    public void login(Map<String, String> map) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createService(MyService.class);
        myService.loginPost(map)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<LoginBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(LoginBean loginBean) {
                        if (loginBean.getCode().equals("0")){
                           iPresenter.getLogin(loginBean);
                        }else {
                            iPresenter.getErrorData("请注册");
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        iPresenter.getErrorData(e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete: 完成----");
                    }
                });
    }

    @Override
    public void reg(Map<String, String> map) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createService(MyService.class);
        myService.regPost(map)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<RegBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(RegBean regBean) {
                        if (regBean.getCode().equals("0")){
                            iPresenter.getReg(regBean);
                        }else {
                            iPresenter.getRegError(regBean.getMsg());
                        }
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getGoodsListData(String pscid, String page) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createService(MyService.class);
        myService.goodListData(pscid,page)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<GoodsBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(GoodsBean goodsBean) {
                        if (goodsBean.getCode().equals("0")){
                            iPresenter.getGoodsListData(goodsBean.getData());
                        }else {
                            Log.d(TAG, "onNext: aaa"+goodsBean);
                        }
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getGoodsListFresh(String pscid, String page) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createService(MyService.class);
        myService.goodListData(pscid,page)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<GoodsBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(GoodsBean goodsBean) {
                        if (goodsBean.getCode().equals("0")){
                            iPresenter.getGoodsListDataFresh(goodsBean.getData());
                        }else {
                            Log.d(TAG, "onNext: "+goodsBean);
                        }
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getGoodsListLoadMore(String pscid, String page) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createService(MyService.class);
        myService.goodListData(pscid,page)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<GoodsBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(GoodsBean goodsBean) {
                        if (goodsBean.getCode().equals("0")){
                            iPresenter.getGoodsListDataLoadMore(goodsBean.getData());
                        }else {
                            Log.d(TAG, "onNext: mmm"+goodsBean);
                        }
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getGoodsDetail(DetailBean.DataBean dataBean) {

    }

    //添加购物车
    @Override
    public void addCart(String uid, String pid,String source) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createService(MyService.class);
        myService.addCart(uid,pid,source)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<AddCartBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(AddCartBean addCartBean) {
                        String code = addCartBean.getCode();
                        Log.d(TAG, "onNext: mm"+code);
                        if (addCartBean.getCode().equals("0")){
                                iPresenter.addSuccess();
                            }else {
                                iPresenter.addError();
                            }
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError: m错误"+e.getMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getCart(Map<String, String> map) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createService(MyService.class);
        myService.getCartGood(map)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<CartGoodBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(CartGoodBean cartGoodBean) {
                        String code = cartGoodBean.getCode();
                        Log.d(TAG, "onNext: mmmm"+code);
                        if (code.equals("0")){
                            iPresenter.getCartList(cartGoodBean.getData());
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError: mm"+e.getMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

presenter层

public interface IPresenter {
    //登录
    void loginPresenter(IModel iModel, IMainView iMainView);
    //接受参数
    void getLogin(LoginBean loginBean);
    //接受失败的提示
    void getErrorData(String string);
    //注册
    void regPresenter(IModel iModel, IRegView iRegView);
    //接受注册的参数
    void getReg(RegBean regBean);
    //接受失败的提示
    void getRegError(String string);
    //商品列表页
    void getGoodsList(IModel iModel, GoodView goodView);
    void getGoodsListFresh(IModel iModel,GoodView goodView);
    void getGoodsListLoadMore(IModel iModel,GoodView goodView);

    void getGoodsListData(List<GoodsBean.DataBean> list);
    void getGoodsListDataFresh(List<GoodsBean.DataBean> list);
    void getGoodsListDataLoadMore(List<GoodsBean.DataBean> list);
    void getGoodsListError(String error);

    //添加购物车
    void addCart(IModel iModel, IDetailView iDetailView);
    void addSuccess();
    void addError();
    //获取购物车列表
    void showCartListToView(IModel iModel, ICartView iCartView);
    void getCartList(List<CartGoodBean.DataBean> list);
    void getCartError(String string);
}

实现类

public class PresenterImpl implements IPresenter{
    private IMainView iMainView;
    private IRegView iRegView;
    private GoodView goodView;
    private static final String TAG = "PresenterImpl";
    private IDetailView iDetailView;
    private ICartView iCartView;
    @Override
    public void loginPresenter(IModel iModel, IMainView iMainView) {
        this.iMainView=iMainView;
        Map<String,String> map=new HashMap<>();
        map.put("mobile",iMainView.getMobile());
        map.put("password",iMainView.getPassword());
        iModel.login(map);
    }

    @Override
    public void getLogin(LoginBean loginBean) {
        iMainView.loginSuccess();
    }

    @Override
    public void getErrorData(String string) {
        iMainView.loginError(string);
    }

    @Override
    public void regPresenter(IModel iModel, IRegView iRegView) {
        this.iRegView=iRegView;
        Map<String,String> map=new HashMap<>();
        map.put("mobile",iRegView.getMobile());
        map.put("password",iRegView.getPassword());
        iModel.reg(map);
    }

    @Override
    public void getReg(RegBean regBean) {
        iRegView.register();
    }

    @Override
    public void getRegError(String string) {
        iRegView.regError(string);
    }
//商品列表
    @Override
    public void getGoodsList(IModel iModel, GoodView goodView) {
        this.goodView=goodView;
        iModel.getGoodsListData("1","1");
    }

    @Override
    public void getGoodsListFresh(IModel iModel, GoodView goodView) {
        this.goodView=goodView;
        iModel.getGoodsListFresh("1",goodView.getPage());
    }

    @Override
    public void getGoodsListLoadMore(IModel iModel, GoodView goodView) {
        this.goodView=goodView;
        iModel.getGoodsListLoadMore("1",goodView.getPage());
    }

    @Override
    public void getGoodsListData(List<GoodsBean.DataBean> list) {
        goodView.showGoods(list);
    }

    @Override
    public void getGoodsListDataFresh(List<GoodsBean.DataBean> list) {
        goodView.showGoodsListFresh(list);
    }

    @Override
    public void getGoodsListDataLoadMore(List<GoodsBean.DataBean> list) {
        goodView.showGoodsListLoadMore(list);
    }

    @Override
    public void getGoodsListError(String error) {
        Log.d(TAG, "getGoodsListError: 错误==="+error);
    }

    @Override
    public void addCart(IModel iModel, IDetailView iDetailView) {
        this.iDetailView=iDetailView;
        iModel.addCart(iDetailView.getUid(),iDetailView.getPid(),iDetailView.getSource());
        Log.d(TAG, "addCart: pp"+iDetailView.getPid());
    }

    @Override
    public void addSuccess() {
        iDetailView.addSuccess();
    }

    @Override
    public void addError() {
        iDetailView.addError();
    }

    @Override
    public void showCartListToView(IModel iModel, ICartView iCartView) {
        this.iCartView=iCartView;


    }

    @Override
    public void getCartList(List<CartGoodBean.DataBean> list) {
        iCartView.showCartGood(list);
    }

    @Override
    public void getCartError(String string) {
        iCartView.showError(string);
    }
}

登录view

public interface IMainView {
    void loginSuccess();
    void loginError(String error);

    String getMobile();

    String getPassword();
}
public class MainActivity extends AppCompatActivity implements IMainView,View.OnClickListener{

    private EditText mobile;
    private EditText password;
    private Button login;

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

    }

    private void initView() {
        mobile = findViewById(R.id.mobil);
        password = findViewById(R.id.pssword);
        login = findViewById(R.id.login);
        login.setOnClickListener(this);
    }
//登录成功
    @Override
    public void loginSuccess() {
        startActivity(new Intent(MainActivity.this,GoodsActivity.class));
    }
//登录失败
    @Override
    public void loginError(String error) {
        startActivity(new Intent(MainActivity.this,RegActivity.class));
    }

    @Override
    public String getMobile() {
        return mobile.getText().toString();
    }

    @Override
    public String getPassword() {
        return password.getText().toString();
    }

    @Override
    public void onClick(View view) {
        PresenterImpl presenter = new PresenterImpl();
        presenter.loginPresenter(new ModelImpl(presenter),this);
    }
}

注册view

public interface IRegView {
    //注册
    void register();
    void regError(String error);

    String getMobile();
    String getPassword();
}
public class RegActivity extends AppCompatActivity implements IRegView,View.OnClickListener{

    private EditText user;
    private EditText pwd;
    private Button reg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reg);
        initView();
    }

    private void initView() {
        user = findViewById(R.id.user);
        pwd = findViewById(R.id.psw);
        reg = findViewById(R.id.reg);
        reg.setOnClickListener(this);
    }

    @Override
    public void register() {
        startActivity(new Intent(RegActivity.this,GoodsActivity.class));
    }

    @Override
    public void regError(String error) {
        Toast.makeText(this, "--"+error, Toast.LENGTH_SHORT).show();
    }

    @Override
    public String getMobile() {
        return user.getText().toString();
    }

    @Override
    public String getPassword() {
        return pwd.getText().toString();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.reg:
                PresenterImpl presenter = new PresenterImpl();
                presenter.regPresenter(new ModelImpl(presenter),this);
                break;
        }

    }
}

列表view

public interface GoodView {
    //展示商品
    void showGoods(List<GoodsBean.DataBean> list);
    //刷新
    void showGoodsListFresh(List<GoodsBean.DataBean> list);
    //加载更多
    void showGoodsListLoadMore(List<GoodsBean.DataBean> list);
    //获取page
    String getPage();
}
public class GoodsActivity extends AppCompatActivity implements GoodView{

    private XRecyclerView xrecycler;
    int page=1;
    private long firstTime=0;
    private PresenterImpl presenter;
    List<GoodsBean.DataBean> list=new ArrayList<>();
    private MyGoodsListAdapter myGoodsListAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_goods);
        initView();
        presenter = new PresenterImpl();
        presenter.getGoodsList(new ModelImpl(presenter),this);
    }

    private void initView() {
        xrecycler = findViewById(R.id.xrecycler);
        xrecycler.setLayoutManager(new LinearLayoutManager(this));
        xrecycler.setPullRefreshEnabled(true);
        xrecycler.setLoadingMoreEnabled(true);
        xrecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                page=1;
                presenter.getGoodsListFresh(new ModelImpl(presenter),GoodsActivity.this);

                Toast.makeText(GoodsActivity.this, "刷新完成", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onLoadMore() {
                page++;
                presenter.getGoodsListLoadMore(new ModelImpl(presenter),GoodsActivity.this);
                Toast.makeText(GoodsActivity.this, "加载更多完成", Toast.LENGTH_SHORT).show();

            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
            if (System.currentTimeMillis() - firstTime > 2000) {
                Toast.makeText(GoodsActivity.this, "再按一次退出程序--->onKeyDown", Toast.LENGTH_SHORT).show();
                firstTime = System.currentTimeMillis();
            } else {
                finish();
                System.exit(0);
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
//显示商品
    @Override
    public void showGoods(List<GoodsBean.DataBean> list) {
        this.list=list;
        myGoodsListAdapter = new MyGoodsListAdapter(GoodsActivity.this,list);
        xrecycler.setAdapter(myGoodsListAdapter);
        myGoodsListAdapter.setOnMyItemClick(new MyGoodsListAdapter.MyItemClick() {
            @Override
            public void onMyItemClick(View view, int position, int pscid) {
                GoodsBean.DataBean dataBean = GoodsActivity.this.list.get(position);
                int pid = dataBean.getPid();
                Intent intent=new Intent(GoodsActivity.this,DetailActivity.class);
               intent.putExtra("dataBean",dataBean);
               startActivity(intent);
            }
        });
    }

    @Override
    public void showGoodsListFresh(List<GoodsBean.DataBean> list) {
        this.list=list;
        myGoodsListAdapter=new MyGoodsListAdapter(GoodsActivity.this,list);
        xrecycler.setAdapter(myGoodsListAdapter);
        xrecycler.refreshComplete();
    }

    @Override
    public void showGoodsListLoadMore(List<GoodsBean.DataBean> list) {
        this.list.addAll(list);
        myGoodsListAdapter.notifyDataSetChanged();
        xrecycler.loadMoreComplete();
    }

    @Override
    public String getPage() {
        return page+"";
    }
}

详情页面

public interface IDetailView {
  String getUid();
  String getSource();
  String getPid();
  void addSuccess();

  void addError();
}
public class DetailActivity extends AppCompatActivity implements IDetailView,View.OnClickListener{
    private static final String TAG = "DetailActivity";

    private SimpleDraweeView detail_icon;
    private TextView detail_price;
    private TextView detail_title;
    private GoodsBean.DataBean dataBean;
    private PresenterImpl presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        initView();

    }

    private void initView() {
        Intent intent = getIntent();
        dataBean = (GoodsBean.DataBean) intent.getSerializableExtra("dataBean");
        detail_icon = findViewById(R.id.detail_icon);
        detail_price = findViewById(R.id.detail_price);
        detail_title = findViewById(R.id.detail_title);
        TextView addcart = findViewById(R.id.detail_addcart);
        TextView detail_cart = findViewById(R.id.detail_Cart);
        String s = dataBean.getImages().split("\\|")[0];
        detail_icon.setImageURI(s);
        detail_title.setText(dataBean.getTitle());
        detail_price.setText(dataBean.getBargainPrice()+"");
        addcart.setOnClickListener(this);
        detail_cart.setOnClickListener(this);
    }


    @Override
    public String getUid() {
        return "71";
    }

    @Override
    public String getSource() {
        return "android";
    }

    @Override
    public String getPid() {
        Log.d(TAG, "getPid: 详情页"+dataBean.getPid());
        return dataBean.getPid()+"";

    }

    @Override
    public void addSuccess() {
        Toast.makeText(this, "加入购物车成功", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void addError() {
        Toast.makeText(this, "加入购物车失败", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.detail_addcart:
                presenter = new PresenterImpl();
                presenter.addCart(new ModelImpl(presenter),DetailActivity.this);

                break;
            case R.id.detail_Cart:
                  //  startActivity(new Intent(DetailActivity.this,CartActivity.class));
                break;
        }
    }
}

recycle适配器

public class MyGoodsListAdapter extends RecyclerView.Adapter<MyGoodsListAdapter.MyViewHolder> {
    private Context context;
    private List<GoodsBean.DataBean> list;
    private MyItemClick myItemClick;

    public MyGoodsListAdapter(Context context, List<GoodsBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        String s = list.get(position).getImages().split("\\|")[0];
        holder.getSim_icon().setImageURI(s);
        holder.getXr_title().setText(list.get(position).getTitle());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myItemClick.onMyItemClick(view,position,list.get(position).getPscid());
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        private final TextView xr_title;
        private final SimpleDraweeView sim_icon;

        public MyViewHolder(View itemView) {
            super(itemView);
            xr_title = itemView.findViewById(R.id.xrecycler_title);
            sim_icon = itemView.findViewById(R.id.sim_icon);
        }

        public TextView getXr_title() {
            return xr_title;
        }

        public SimpleDraweeView getSim_icon() {
            return sim_icon;
        }
    }
    //自定义接口
    public interface MyItemClick{
        void onMyItemClick(View view,int position,int pscid);
    }
    public void setOnMyItemClick(MyItemClick myItemClick){
        this.myItemClick =myItemClick;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值