一、导入依赖
//Butterknifejia依赖
compile 'com.jakewharton:butterknife:8.4.0'
//使用Butterknife调用插件:
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
// Rxjava依赖
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
// Retrofit的依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
// Fresco的依赖
compile 'com.facebook.fresco:fresco:1.3.0'
// XRecyclerView 依赖:
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
//Butterknife的classpath (写在project下的build.gradle)
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
二、添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
接下来正式开始写代码:
1、首先:httpConfig –>要用到的接口路径
package com.bwei.lenovo.day0404_yuekao2.http;
public class HttpConfig {
public static String base_url="http://120.27.23.105/";
}
2、RetrofitUtils 请求网络的工具类
package com.bwei.lenovo.day0404_yuekao2.http;
import com.google.gson.Gson;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitUtils {
private static RetrofitUtils retrofitUtils=null;
private final Retrofit retrofit;
public static RetrofitUtils getInstance(){
if (retrofitUtils==null){
retrofitUtils = new RetrofitUtils();
}
return retrofitUtils;
}
public RetrofitUtils() {
retrofit = new Retrofit.Builder()
.baseUrl(HttpConfig.base_url)
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
public <T> T createRequest(Class<T> clz){
T t = retrofit.create(clz);
return t;
}
}
一、代码里用到的所有布局
<1>登录页面的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwei.lenovo.day0404_yuekao2.MainActivity">
<TextView
android:textColor="#f00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal"
android:text="淘宝登录"
android:textSize="30dp" />
<View
android:layout_width="match_parent"
android:layout_height="2sp"
android:background="#f00" />
<EditText
android:layout_marginTop="20dp"
android:id="@+id/moblie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="手机号/会员号/邮箱" />
<EditText
android:layout_marginTop="10dp"
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码" />
<Button
android:layout_marginTop="10dp"
android:layout_gravity="center_horizontal"
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"/>
</LinearLayout>
<2>注册页面的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwei.lenovo.day0404_yuekao2.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal"
android:text="淘宝注册页面"
android:textColor="#f00"
android:textSize="30dp" />
<View
android:layout_width="match_parent"
android:layout_height="2sp"
android:background="#f00" />
<EditText
android:id="@+id/moblie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="35dp"
android:hint="请输入用户名" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:hint="请输入密码" />
<EditText
android:id="@+id/password_true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:hint="确认输入密码" />
<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:hint="请填写邮箱" />
<Button
android:id="@+id/register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="注册" />
</LinearLayout>
<3>Xrecylerview展示商品列表的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwei.lenovo.day0404_yuekao2.Acitivity.GoodsActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/xrecylerview"></com.jcodecraeer.xrecyclerview.XRecyclerView>
</LinearLayout>
<4>Xrecylerview商品展示的item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_marginLeft="10dp"
android:layout_width="120dp"
android:id="@+id/goods_img"
android:layout_marginRight="20dp"
android:layout_height="120dp" />
<TextView
android:text="价格"
android:textSize="20dp"
android:id="@+id/goods_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<5>商品详情的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwei.lenovo.day0404_yuekao2.Acitivity.DetaileActivity">
<LinearLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_marginTop="40dp"
android:id="@+id/detaile_img"
android:layout_width="match_parent"
android:scaleType="fitXY"
android:layout_height="500dp"
android:layout_gravity="center_horizontal" />
<TextView
android:textSize="25sp"
android:layout_marginTop="10dp"
android:id="@+id/detaile_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标题" />
<TextView
android:textColor="#f00"
android:layout_marginTop="10dp"
android:text="价格"
android:id="@+id/detaile_price"
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">
<LinearLayout
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_weight="1"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/order_msg" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="客服" />
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/dianpu" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="店家" />
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/normalheart" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="收藏" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="2">
<Button
android:layout_weight="1"
android:id="@+id/detail_addCart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FEC401"
android:text="加入购物车"
android:textColor="#FFFFFF" />
<Button
android:layout_weight="1"
android:id="@+id/detail_goodsCart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FF6A04"
android:text="立即购买"
android:textColor="#FFFFFF" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
二、view层
<1>view的 ( ILoginView ) 登录 的接口
package com.bwei.lenovo.day0404_yuekao2.view;
public interface ILoginView {
//登录成功
void loginSuccess();
//登录失败
void loginError(String error);
//获取用户名
String getMobile();
//获取密码
String getPassword();
}
<2>view的 (IRegView)注册的接口
package com.bwei.lenovo.day0404_yuekao2.view;
public interface IRegView {
//注册
void register();
//注册成功
void regSucces(String error);
//获取用户名
String getMobile();
//获取密码
String getPassword();
}
<3>view的 ( IGoodsView) 展示xrecyclerview的接口
package com.bwei.lenovo.day0404_yuekao2.view;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import java.util.List;
public interface IGoodsView {
//展示商品
void getGoodsList(List<GoodsBean.DataBean> list);
//刷新
void getshowRefresh(List<GoodsBean.DataBean> list);
//加载
void getshowLoadMore(List<GoodsBean.DataBean> list);
//获取page
String getpage();
}
<4>view的 (IAddCartView) 添加购物车的接口
package com.bwei.lenovo.day0404_yuekao2.view;
public interface IAddCartView {
//获取uid 展示详情页面
String getuid();
//获取pid
String getpid();
//添加成功的方法
void addSuccess();
// 添加失败的方法
void addError();
}
三、model层 获取数据
<1>MyService接口
package com.bwei.lenovo.day0404_yuekao2.model;
import com.bwei.lenovo.day0404_yuekao2.bean.AddBean;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import com.bwei.lenovo.day0404_yuekao2.bean.ResBean;
import com.bwei.lenovo.day0404_yuekao2.bean.UserBean;
import java.util.Map;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.QueryMap;
import rx.Observable;
public interface MyService {
//登录
@FormUrlEncoded
@POST("user/login")
Observable<UserBean> getloginData(@FieldMap Map<String, String> map);
//注册
@FormUrlEncoded
@POST("user/reg")
Observable<ResBean> getRegister(@FieldMap Map<String, String> map);
//展示商品列表
@FormUrlEncoded
@POST("product/getProducts")
Observable<GoodsBean> getGoodsList(@FieldMap Map<String, String> map);
//添加购物车
@GET("product/addCart")
Observable<AddBean> AddGoodsCart(@QueryMap Map<String, String> map);
}
<2> model层 (IModel)接口
package com.bwei.lenovo.day0404_yuekao2.model;
import java.util.Map;
public interface IModel {
//登录
void login(Map<String, String> map);
//注册
void register(Map<String, String> map);
//商品列表
void getGoodsList(Map<String, String> map);
//刷新
void getGoodsRefresh(Map<String, String> map);
//加载
void getGoodsLoadMore(Map<String, String> map);
//加入购物车
void getAddGoodsCart(Map<String,String> map);
}
<3>model层 (IModelmpI) IModel的实现类
package com.bwei.lenovo.day0404_yuekao2.model;
import android.util.Log;
import com.bwei.lenovo.day0404_yuekao2.bean.AddBean;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import com.bwei.lenovo.day0404_yuekao2.bean.ResBean;
import com.bwei.lenovo.day0404_yuekao2.http.RetrofitUtils;
import com.bwei.lenovo.day0404_yuekao2.presenter.IPresenter;
import com.bwei.lenovo.day0404_yuekao2.bean.UserBean;
import java.util.Map;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class IModelmpI implements IModel {
private static final String TAG = "IModelmpI";
IPresenter iPresenter;
public IModelmpI(IPresenter iPresenter) {
this.iPresenter = iPresenter;
}
//登录
@Override
public void login(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getInstance();
MyService myService = instance.createRequest(MyService.class);
Observable<UserBean> userBeanObservable = myService.getloginData(map);
userBeanObservable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UserBean>() {
@Override
public void onCompleted() {
Log.d("IModelmpI", "onCompleted()-登录完成----------");
}
@Override
public void onError(Throwable e) {
Log.d("IModelmpI", "onError()-登录出现异常----------" + e.getMessage());
}
@Override
public void onNext(UserBean userBean) {
Log.d("IModelmpI", "onNext()-登录正在执行----------" + userBean);
if (userBean.getCode().equals("0")) {
iPresenter.getLogin(userBean);
} else {
iPresenter.getErrorData("请先注册吧!");
}
}
});
}
//注册
@Override
public void register(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getInstance();
MyService myService = instance.createRequest(MyService.class);
Observable<ResBean> register = myService.getRegister(map);
register.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<ResBean>() {
@Override
public void onCompleted() {
Log.d("IModelmpI", "onCompleted()-注册完成--------------");
}
@Override
public void onError(Throwable e) {
Log.d("IModelmpI", "onError()-注册异常-------------" + e.getMessage());
}
@Override
public void onNext(ResBean resBean) {
Log.d("IModelmpI", "onNext()-注册正在执行-------------" + resBean);
if (resBean.getCode().equals("0")) {
iPresenter.getRegister(resBean);
}
}
});
}
//展示商品列表
@Override
public void getGoodsList(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getInstance();
MyService myService = instance.createRequest(MyService.class);
Observable<GoodsBean> observable = myService.getGoodsList(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<GoodsBean>() {
@Override
public void onCompleted() {
Log.d("IModelmpI", "onCompleted()-获取商品展示完成----------------");
}
@Override
public void onError(Throwable e) {
Log.d("IModelmpI", "onError()-获取商品展示异常----------------" + e.getMessage());
}
@Override
public void onNext(GoodsBean goodsBean) {
Log.d("IModelmpI", "onNext()-获取商品展示-正在执行-------------" + goodsBean);
if (goodsBean.getCode().equals("0")) {
iPresenter.getGoodsLists(goodsBean.getData());
}
}
});
}
//刷新列表
@Override
public void getGoodsRefresh(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getInstance();
MyService myService = instance.createRequest(MyService.class);
Observable<GoodsBean> observable = myService.getGoodsList(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<GoodsBean>() {
@Override
public void onCompleted() {
Log.d("IModelmpI", "onCompleted()-刷新完成----------------");
}
@Override
public void onError(Throwable e) {
Log.d("IModelmpI", "onError()-刷新异常-----------" + e.getMessage());
}
@Override
public void onNext(GoodsBean goodsBean) {
Log.d("IModelmpI", "onNext()-刷新正在执行-----------" + goodsBean);
if (goodsBean.getCode().equals("0")) {
iPresenter.getGoodsRefreshLists(goodsBean.getData());
}
}
});
}
//加载列表
@Override
public void getGoodsLoadMore(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getInstance();
MyService myService = instance.createRequest(MyService.class);
Observable<GoodsBean> goodsList = myService.getGoodsList(map);
goodsList.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<GoodsBean>() {
@Override
public void onCompleted() {
Log.d("IModelmpI", "onCompleted()-加载完成----------");
}
@Override
public void onError(Throwable e) {
Log.d("IModelmpI", "onError()-加载异常-------" + e.getMessage());
}
@Override
public void onNext(GoodsBean goodsBean) {
Log.d("IModelmpI", "onNext()-加载正在执行----------------" + goodsBean);
Log.e(TAG, "onNext: ," + goodsBean.getCode());
if (goodsBean.getCode().equals("0")) {
iPresenter.getGoodsLoadMoreLists(goodsBean.getData());
}
}
});
}
//添加购物车
@Override
public void getAddGoodsCart(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getInstance();
MyService myService = instance.createRequest(MyService.class);
Observable<AddBean> observable = myService.AddGoodsCart(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<AddBean>() {
@Override
public void onCompleted() {
Log.d("IModelmpI", "onCompleted()-添加购物车加载完成-----------");
}
@Override
public void onError(Throwable e) {
Log.d("IModelmpI", "onError()-添加购物车出现异常---------" + e.getMessage());
iPresenter.addError();
}
@Override
public void onNext(AddBean addBean) {
Log.d("IModelmpI", "onNext()-添加购物车正在执行--------" + addBean);
String code = addBean.getCode();
Log.d(TAG, "--获取code-------------"+code);
if (code.equals("0")) {
iPresenter.addSuccess();
} else {
iPresenter.addError();
}
}
});
}
}
三、p层做逻辑操作
<1>p层的 (IPresentr) 接口
package com.bwei.lenovo.day0404_yuekao2.presenter;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import com.bwei.lenovo.day0404_yuekao2.bean.ResBean;
import com.bwei.lenovo.day0404_yuekao2.model.IModel;
import com.bwei.lenovo.day0404_yuekao2.view.IAddCartView;
import com.bwei.lenovo.day0404_yuekao2.view.IGoodsView;
import com.bwei.lenovo.day0404_yuekao2.view.ILoginView;
import com.bwei.lenovo.day0404_yuekao2.view.IRegView;
import com.bwei.lenovo.day0404_yuekao2.bean.UserBean;
import java.util.List;
public interface IPresenter {
//登录
void getLoginPresenter(IModel iModel, ILoginView iLoginView);
void getLogin(UserBean userBean);
//接受失败的提示
void getErrorData(String string);
//注册
void getRegisterPresenter(IModel iModel, IRegView iRegView);
void getRegister(ResBean resBean);
//接受失败的提示
void getRegisterErrorData(String string);
//展示列表
void getGoodsView(IModel iModel, IGoodsView iGoodsView);
void getGoodsLists(List<GoodsBean.DataBean> list);
//刷新
void getGoodsRefreshView(IModel iModel, IGoodsView iGoodsView);
void getGoodsRefreshLists(List<GoodsBean.DataBean> list);
//加载
void getGoodsLoadMoreView(IModel iModel, IGoodsView iGoodsView);
void getGoodsLoadMoreLists(List<GoodsBean.DataBean> list);
//添加购物车
void getaddCart(IModel iModel, IAddCartView iAddCartView);
void addSuccess();
void addError();
}
<2>P层 ( IPresenterImpI) IPresentr 接口的实现类
package com.bwei.lenovo.day0404_yuekao2.presenter;
import android.util.Log;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import com.bwei.lenovo.day0404_yuekao2.bean.ResBean;
import com.bwei.lenovo.day0404_yuekao2.model.IModel;
import com.bwei.lenovo.day0404_yuekao2.view.IAddCartView;
import com.bwei.lenovo.day0404_yuekao2.view.IGoodsView;
import com.bwei.lenovo.day0404_yuekao2.view.ILoginView;
import com.bwei.lenovo.day0404_yuekao2.view.IRegView;
import com.bwei.lenovo.day0404_yuekao2.bean.UserBean;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class IPresenterImpI implements IPresenter {
private ILoginView iLoginView;
private IRegView iRegView;
private IGoodsView iGoodsView;
private static final String TAG = "IPresenterImpI";
private IAddCartView iAddCartView;
//登录
@Override
public void getLoginPresenter(IModel iModel, ILoginView iLoginView) {
this.iLoginView = iLoginView;
Map<String, String> map = new HashMap<>();
map.put("mobile", iLoginView.getMobile());
map.put("password", iLoginView.getPassword());
iModel.login(map);
}
@Override
public void getLogin(UserBean userBean) {
Log.d("IPresenterImpI", "--P层获取到数据-------------" + userBean);
iLoginView.loginSuccess();
}
@Override
public void getErrorData(String string) {
Log.d("IPresenterImpI", "--P层出现异常-------------" + string);
iLoginView.loginError(string);
}
//注册
@Override
public void getRegisterPresenter(IModel iModel, IRegView iRegView) {
this.iRegView = iRegView;
Map<String, String> map = new HashMap<>();
map.put("mobile", iRegView.getMobile());
map.put("password", iRegView.getPassword());
iModel.register(map);
}
@Override
public void getRegister(ResBean resBean) {
Log.d("IPresenterImpI", "p层获取到数据------------" + resBean);
iRegView.register();
}
@Override
public void getRegisterErrorData(String string) {
iRegView.regSucces(string);
}
//展示数据
@Override
public void getGoodsView(IModel iModel, IGoodsView iGoodsView) {
this.iGoodsView = iGoodsView;
Map<String, String> map = new HashMap<>();
map.put("pscid", "1");
map.put("page", "1");
iModel.getGoodsList(map);
}
@Override
public void getGoodsLists(List<GoodsBean.DataBean> list) {
Log.d("IPresenterImpI", "p层展示--获取到数据----" + list);
iGoodsView.getGoodsList(list);
}
//刷新
@Override
public void getGoodsRefreshView(IModel iModel, IGoodsView iGoodsView) {
this.iGoodsView = iGoodsView;
Map<String, String> map = new HashMap<>();
// map.put("2", iGoodsView.getpage());
map.put("page", iGoodsView.getpage());
map.put("pscid", "1");
iModel.getGoodsRefresh(map);
}
@Override
public void getGoodsRefreshLists(List<GoodsBean.DataBean> list) {
Log.d("IPresenterImpI", "p层获取到刷新的数据-------" + list);
iGoodsView.getshowRefresh(list);
}
//加载
@Override
public void getGoodsLoadMoreView(IModel iModel, IGoodsView iGoodsView) {
this.iGoodsView = iGoodsView;
Map<String, String> map = new HashMap<>();
// map.put("2", iGoodsView.getpage());
map.put("page", iGoodsView.getpage());
map.put("pscid", "1");
iModel.getGoodsLoadMore(map);
}
@Override
public void getGoodsLoadMoreLists(List<GoodsBean.DataBean> list) {
Log.d("IPresenterImpI", "p层获取到加载的数据--------" + list);
iGoodsView.getshowLoadMore(list);
}
//添加购物车
@Override
public void getaddCart(IModel iModel, IAddCartView iAddCartView) {
this.iAddCartView = iAddCartView;
Map<String, String> map = new HashMap<>();
map.put("uid", iAddCartView.getuid());
map.put("pid", iAddCartView.getpid());
map.put("source","android");
iModel.getAddGoodsCart(map);
}
//添加成功的方法
@Override
public void addSuccess() {
iAddCartView.addSuccess();
}
//添加失败的方法
@Override
public void addError() {
iAddCartView.addError();
}
}
五、Activity界面
<1>登录页面的Activity (MainActivity ) 主页面登录跳转
package com.bwei.lenovo.day0404_yuekao2;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.bwei.lenovo.day0404_yuekao2.Acitivity.GoodsActivity;
import com.bwei.lenovo.day0404_yuekao2.Acitivity.ResActivity;
import com.bwei.lenovo.day0404_yuekao2.model.IModelmpI;
import com.bwei.lenovo.day0404_yuekao2.presenter.IPresenter;
import com.bwei.lenovo.day0404_yuekao2.presenter.IPresenterImpI;
import com.bwei.lenovo.day0404_yuekao2.view.ILoginView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity implements ILoginView {
@BindView(R.id.moblie)
EditText moblie;
@BindView(R.id.password)
EditText password;
@BindView(R.id.login)
Button login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
//登录的点击事件
@OnClick(R.id.login)
public void onViewClicked() {
IPresenterImpI iPresenterImpI = new IPresenterImpI();
iPresenterImpI.getLoginPresenter(new IModelmpI(iPresenterImpI),this);
}
//------------------------重写LoginView方法----------------
//成功
@Override
public void loginSuccess() {
//登录成功时跳转到展示商品列表的页面
Intent intent = new Intent(MainActivity.this, GoodsActivity.class);
startActivity(intent);
}
//失败
@Override
public void loginError(String error) {
Toast.makeText(this, "登录失败,准备跳往注册页面", Toast.LENGTH_SHORT).show();
//跳往注册页面
Intent intent = new Intent(MainActivity.this, ResActivity.class);
startActivity(intent);
}
//获取用户名
@Override
public String getMobile() {
return moblie.getText().toString();
}
//获取密码
@Override
public String getPassword() {
return password.getText().toString();
}
}
<2>注册的Activity (ResActivity )
package com.bwei.lenovo.day0404_yuekao2.Acitivity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.bwei.lenovo.day0404_yuekao2.MainActivity;
import com.bwei.lenovo.day0404_yuekao2.R;
import com.bwei.lenovo.day0404_yuekao2.model.IModelmpI;
import com.bwei.lenovo.day0404_yuekao2.presenter.IPresenterImpI;
import com.bwei.lenovo.day0404_yuekao2.view.IRegView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class ResActivity extends AppCompatActivity implements IRegView{
@BindView(R.id.moblie)
EditText moblie;
@BindView(R.id.password)
EditText password;
@BindView(R.id.password_true)
EditText passwordTrue;
@BindView(R.id.email)
EditText email;
@BindView(R.id.register)
Button register;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_res);
ButterKnife.bind(this);
}
//注册的点击事件
@OnClick(R.id.register)
public void onViewClicked() {
IPresenterImpI iPresenterImpI=new IPresenterImpI();
iPresenterImpI.getRegisterPresenter(new IModelmpI(iPresenterImpI),this);
}
//------------- 注册的点击事件-----------------------
@Override
public void register() {
Intent intent = new Intent(ResActivity.this, GoodsActivity.class);
startActivity(intent);
}
@Override
public void regSucces(String error) {
Toast.makeText(this, "注册失败---", Toast.LENGTH_SHORT).show();
}
@Override
public String getMobile() {
return moblie.getText().toString();
}
@Override
public String getPassword() {
return password.getText().toString();
}
}
<3>商品列表的Activity (GoodsActivity)
package com.bwei.lenovo.day0404_yuekao2.Acitivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Toast;
import com.bwei.lenovo.day0404_yuekao2.R;
import com.bwei.lenovo.day0404_yuekao2.adpter.MyGoodsAdapter;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import com.bwei.lenovo.day0404_yuekao2.model.IModelmpI;
import com.bwei.lenovo.day0404_yuekao2.presenter.IPresenterImpI;
import com.bwei.lenovo.day0404_yuekao2.view.IGoodsView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import static android.os.Build.VERSION_CODES.M;
public class GoodsActivity extends AppCompatActivity implements IGoodsView {
private static final String TAG = "GoodsActivity";
@BindView(R.id.xrecylerview)
XRecyclerView xrecylerview;
private long firstTime = 0;
int page = 1;
private IPresenterImpI iPresenterImpI;
List<GoodsBean.DataBean> list = new ArrayList<>();
private MyGoodsAdapter myGoodsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_goods);
ButterKnife.bind(this);
//初始化数据
initviews();
iPresenterImpI = new IPresenterImpI();
iPresenterImpI.getGoodsView(new IModelmpI(iPresenterImpI), this);
}
private void initviews() {
//刷新
xrecylerview.setLayoutManager(new LinearLayoutManager(this));
xrecylerview.setLoadingMoreEnabled(true);
xrecylerview.setPullRefreshEnabled(true);
xrecylerview.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
page = 1;
iPresenterImpI.getGoodsRefreshView(new IModelmpI(iPresenterImpI), GoodsActivity.this);
Log.d(TAG, "onRefresh: -----+刷新====");
xrecylerview.refreshComplete();
}
@Override
public void onLoadMore() {
Log.d(TAG, "onLoadMore: 加载=====");
//加载时进行延时一秒的操作
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
page++;
iPresenterImpI.getGoodsLoadMoreView(new IModelmpI(iPresenterImpI), GoodsActivity.this);
xrecylerview.loadMoreComplete();
}
}, 1000);
}
});
}
//---------------------------------重写IGoodsview---方法-------------------------------------------------------
//展示商品列表
@Override
public void getGoodsList(final List<GoodsBean.DataBean> list) {
this.list = list;
Log.d("GoodsActivity", "-展示列表activity--获取到集合--------" + list);
myGoodsAdapter = new MyGoodsAdapter(this, list);
xrecylerview.setAdapter(myGoodsAdapter);
//展示列表的点击事件---》跳转到详情页---》 这里要注意在bean类里面加上Serializable
myGoodsAdapter.setOnMyitemClick(new MyGoodsAdapter.MyItemClickLinstener() {
@Override
public void onMyItemClick(View view, int poistion, int pscid) {
GoodsBean.DataBean dataBean = GoodsActivity.this.list.get(poistion);
Intent intent = new Intent(GoodsActivity.this, DetaileActivity.class);
intent.putExtra("goodsbean", dataBean);
startActivity(intent);
}
});
}
//刷新
@Override
public void getshowRefresh(List<GoodsBean.DataBean> list) {
this.list = list;
Log.d("GoodsActivity", "显示刷新----" + list);
// xrecylerview.setAdapter(myGoodsAdapter);
myGoodsAdapter.setList(list);
myGoodsAdapter.notifyDataSetChanged();
}
//加载
@Override
public void getshowLoadMore(List<GoodsBean.DataBean> list) {
myGoodsAdapter.getList().addAll(list);
//刷新适配器
myGoodsAdapter.notifyDataSetChanged();
Log.d("GoodsActivity", "显示加载----" + list.toString());
}
// 获取page
@Override
public String getpage() {
return page + "";
}
//点击按钮退出程序提示
@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, "再按一次退出程序--->确定么", Toast.LENGTH_SHORT).show();
firstTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
<4>商品详情页的Activity (DetaileActivity)
package com.bwei.lenovo.day0404_yuekao2.Acitivity;
import android.content.Intent;
import android.graphics.Paint;
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.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.bwei.lenovo.day0404_yuekao2.R;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import com.bwei.lenovo.day0404_yuekao2.model.IModelmpI;
import com.bwei.lenovo.day0404_yuekao2.presenter.IPresenterImpI;
import com.bwei.lenovo.day0404_yuekao2.view.IAddCartView;
import com.facebook.drawee.view.SimpleDraweeView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class DetaileActivity extends AppCompatActivity implements IAddCartView {
@BindView(R.id.detail_addCart)
Button detailAddCart;
@BindView(R.id.detail_goodsCart)
Button detailGoodsCart;
@BindView(R.id.detaile_img)
SimpleDraweeView detaileImg;
@BindView(R.id.detaile_title)
TextView detaileTitle;
@BindView(R.id.detaile_price)
TextView detailePrice;
private GoodsBean.DataBean dataBean;
private IPresenterImpI iPresenterImpI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detaile);
ButterKnife.bind(this);
//获取商品列表传过来的数据
getDatas();
}
//点击事件
@OnClick({R.id.detail_addCart, R.id.detail_goodsCart})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.detail_addCart:
//调用平层加载添加购物车数据
iPresenterImpI = new IPresenterImpI();
iPresenterImpI.getaddCart(new IModelmpI(iPresenterImpI),this);
break;
case R.id.detail_goodsCart:
//跳转购物车列表页面
Intent intent = new Intent(DetaileActivity.this,GoodsCartActivity.class);
startActivity(intent);
break;
}
}
//=------------------重写IAddView的方法----------------
//根据传过来的对象 -->获取详情页面的数据
public void getDatas() {
Intent intent = getIntent();
dataBean = (GoodsBean.DataBean) intent.getSerializableExtra("goodsbean");
String s = dataBean.getImages().split("\\|")[0];
//图片
detaileImg.setImageURI(s);
//标题
detaileTitle.setText(dataBean.getTitle());
//价格
detailePrice.setText(dataBean.getBargainPrice()+"");
//给价格 添加删除线
detailePrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
}
//获取uid的方法
@Override
public String getuid() {
return "71";
}
//获取pid的方法
@Override
public String 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();
}
}
六、Frsco展示图片需要初始化,不要忘记去清单文件配置哦!这里就不写啦!
package com.bwei.lenovo.day0404_yuekao2.application;
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
七、接下来是适配器 adpter (MyGoodsAdapter )
package com.bwei.lenovo.day0404_yuekao2.adpter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.bwei.lenovo.day0404_yuekao2.R;
import com.bwei.lenovo.day0404_yuekao2.bean.GoodsBean;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
public class MyGoodsAdapter extends RecyclerView.Adapter<MyGoodsAdapter.MyViewHolder> {
Context context;
List<GoodsBean.DataBean> list;
private MyItemClickLinstener myItemClickLinstener;
public MyGoodsAdapter(Context context, List<GoodsBean.DataBean> list) {
this.context = context;
this.list = list;
}
public List<GoodsBean.DataBean> getList() {
return list;
}
public void setList(List<GoodsBean.DataBean> list) {
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflate = View.inflate(context, R.layout.layout_goods_item, null);
MyViewHolder myViewHolder = new MyViewHolder(inflate);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
String image_url = list.get(position).getImages().split("\\|")[0];
holder.getGoods_img().setImageURI(image_url);
holder.getGoods_text().setText(list.get(position).getTitle());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myItemClickLinstener.onMyItemClick(view,position,list.get(position).getPscid());
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
private final SimpleDraweeView goods_img;
private final TextView goods_text;
public MyViewHolder(View itemView) {
super(itemView);
goods_img = itemView.findViewById(R.id.goods_img);
goods_text = itemView.findViewById(R.id.goods_text);
}
public MyViewHolder(View itemView, SimpleDraweeView goods_img, TextView goods_text) {
super(itemView);
this.goods_img = goods_img;
this.goods_text = goods_text;
}
public SimpleDraweeView getGoods_img() {
return goods_img;
}
public TextView getGoods_text() {
return goods_text;
}
}
//定义自己的item事件
public interface MyItemClickLinstener {
void onMyItemClick(View view,int poistion,int pscid);
}
public void setOnMyitemClick(MyItemClickLinstener myItemClickLinstener) {
this.myItemClickLinstener = myItemClickLinstener;
}
}
上面的代码大概就写完功能了,当然里面要注意的是:一定会用到bean类,大家记得添加,这里就不写啦!
当然不要忘记 登录和注册 要封装一个bean类,如下:
package com.bwei.lenovo.day0404_yuekao2.bean;
public class LoginBean {
//用户名
private String mobile;
//密码
private String password;
public LoginBean(String mobile, String password) {
this.mobile = mobile;
this.password = password;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "LoginBean{" +
"mobile='" + mobile + '\'' +
", password='" + password + '\'' +
'}';
}
}
还有:最重要的是给GoodsBean添加序列化,好供商品详情页展示数据 如下: 不要忘记噢!