一、導入依賴
//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添加序列化,好供商品詳情頁展示數據 如下: 不要忘記噢!