詹子聪 5 年 前
コミット
bce46d982f

+ 3 - 0
app/build.gradle

@@ -67,6 +67,9 @@ dependencies {
     compile 'org.aspectj:aspectjrt:1.8.+'
     // 动态权限申请firefly1126/android_permission_aspectjx
     compile 'com.firefly1126.permissionaspect:permissionaspect:1.0.1'
+
+    // 适配器
+    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.50'
     implementation 'com.google.android.material:material:1.1.0'
     implementation project(path: ':mvp')
     implementation project(path: ':network')

+ 75 - 0
app/src/main/java/com/miekir/ym/base/ApiService.java

@@ -0,0 +1,75 @@
+package com.miekir.ym.base;
+
+
+
+import com.miekir.network.base.BaseResponse;
+import com.miekir.ym.bean.BeiUser;
+import com.miekir.ym.ui.coupon.CouponBean;
+
+import java.util.List;
+import java.util.Map;
+
+import io.reactivex.Observable;
+import retrofit2.http.Body;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+import retrofit2.http.Query;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/8/2 10:38
+ * Description: 请求接口
+ */
+public interface ApiService {
+
+    /**请求验证码*/
+    @GET("shibei/api/code")
+    Observable<BaseResponse<Boolean>> getCode(@Query("email") String email);
+
+    /**注册*/
+    //@Headers({ "Content-Type: application/json;charset=UTF-8"})
+    @POST("shibei/api/register")
+    Observable<BaseResponse<BeiUser>> submitRegister(@Body Map<String, Object> body);
+
+    /**邮箱+加密的密码 登录*/
+    @POST("shibei/api/login/normal")
+    Observable<BaseResponse<BeiUser>> submitLogin(@Query("email") String email, @Query("password") String password);
+
+    /**忘记密码*/
+    @POST("shibei/api/password")
+    Observable<BaseResponse<BeiUser>> resetPassword(@Body Map<String, Object> body);
+
+    
+    /*----------------------------------------优惠券开始----------------------------------------*/
+    /**新增优惠券*/
+    @POST("shibei/api/addCoupon")
+    Observable<BaseResponse<String>> addCoupon(@Body CouponBean body);
+
+    /**删除优惠券*/
+    @GET("shibei/api/deleteCouponById")
+    Observable<BaseResponse<String>> deleteCouponById(@Query("couponId") long goodsId);
+
+    /**分页查询优惠券*/
+    @GET("shibei/api/getCouponList")
+    Observable<BaseResponse<List<CouponBean>>> getCouponList(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize);
+
+    
+
+//    /*----------------------------------------升级信息----------------------------------------*/
+//    /**获取版本更新信息*/
+//    @GET("shibei/api/getUpgradeInfo")
+//    Observable<BaseResponse<UpgradeBean>> getUpgradeInfo();
+//
+//    /*----------------------------------------系统配置信息----------------------------------------*/
+//    /**获取系统配置信息*/
+//    @GET("shibei/api/getSystemConfig")
+//    Observable<BaseResponse<SystemBean>> getSystemConfig();
+
+    /**设置是否VIP才能用API*/
+    @POST("shibei/api/setApiConfig")
+    Observable<BaseResponse<String>> setApiConfig(@Query("isApiVipOnly") boolean isApiVipOnly);
+
+
+}

+ 32 - 0
app/src/main/java/com/miekir/ym/bean/BeiUser.java

@@ -0,0 +1,32 @@
+package com.miekir.ym.bean;
+
+import java.io.Serializable;
+
+/**
+ * Created by Jason on 2018/8/26.
+ */
+public class BeiUser implements Serializable {
+    public String email;
+    public String nickName;
+    public String autograph;
+    public String password;
+    public String headIcon;
+    public int sex;
+    public String token;
+    public long registerTimeMillis;
+    public long lastLoginTimeMillis;
+    public boolean isVip;
+    public String deviceId;
+    public String lastIp;
+    public int themeMode;
+    /**当前余额,单位:分*/
+    public long currentMoney;
+    /**历史提现,单位:分*/
+    public long historyCash;
+
+    /**提现支付宝账号*/
+    public String cashAccount;
+    /**是否被禁用*/
+    public boolean isLimit;
+
+}

+ 42 - 0
app/src/main/java/com/miekir/ym/constant/ConstantUrl.java

@@ -0,0 +1,42 @@
+package com.miekir.ym.constant;
+
+/**
+ *
+ *
+ * @author Miekir
+ * @date 2020/7/5 11:27
+ * Description: 常量
+ */
+public interface ConstantUrl {
+
+    /**
+     * 壁纸
+     */
+    String URL_RANDOM_PHOTO_WALLPAPER = "https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture";
+
+    /**
+     * 京东装机模板
+     */
+    String URL_JD_TEMPLATE_COMPUTER = "https://diy.m.jd.com/?utm_user=plusmember&ad_od=share&utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=CopyURL";
+
+    /**
+     * 表情包制作
+     */
+    String URL_BIAO_QING = "https://app.xuty.tk/static/app/index.html";
+
+    /**京东联盟地址*/
+    String URL_JD_UNION = "https://union.jd.com/proManager/index?pageNo=1";
+
+
+    /**
+     * 美团优惠1
+     */
+    String URL_MEITUAN_BONUS_1 = "https://tb.jiuxinban.com/6Fq9k9";
+    String URL_MEITUAN_BONUS_2 = "https://tb.jiuxinban.com/6Fq9mM";
+
+    /**
+     * 二次元
+     */
+    String URL_RANDOM_PHOTO_ECY = "https://uploadbeta.com/api/pictures/random/?key=二次元";
+    //String URL_RANDOM_PHOTO_ECY = "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1594032996&di=6b8d48217739c2555a4b05b931cc45d7&src=http://a3.att.hudong.com/14/75/01300000164186121366756803686.jpg";
+}

+ 5 - 0
app/src/main/java/com/miekir/ym/listener/ItemLongClickListener.java

@@ -0,0 +1,5 @@
+package com.miekir.ym.listener;
+
+public interface ItemLongClickListener {
+    void onItemLongClick(int position);
+}

+ 66 - 0
app/src/main/java/com/miekir/ym/manager/PreferenceManager.java

@@ -0,0 +1,66 @@
+package com.miekir.ym.manager;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import com.google.gson.Gson;
+
+import java.io.Serializable;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/8/2 16:44
+ * Description: 用户信息保存
+ */
+public class PreferenceManager {
+    public static final String KEY_USER = "user_info";
+
+    private static volatile PreferenceManager instance;
+    private PreferenceManager() {}
+
+    private SharedPreferences preferences;
+
+    public static PreferenceManager getInstance() {
+        if (instance == null) {
+            init();
+        }
+        return instance;
+    }
+
+    private static synchronized void init() {
+        if (instance == null) {
+            instance = new PreferenceManager();
+        }
+    }
+
+    public void initPreference(Context context) {
+        preferences = context.getSharedPreferences("current", Context.MODE_PRIVATE);
+    }
+
+    public void putSerializable(String key, Serializable value) {
+        if (value == null) {
+            preferences.edit().putString(key, "").commit();
+        } else {
+            preferences.edit().putString(key, new Gson().toJson(value)).commit();
+        }
+    }
+
+    /**
+     * 这里不能使用TypeToken<T>,因为要明确地具体到某一个类才能解析
+     * @param key
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public <T> T getObject(String key, Class<T> clazz){
+        String jsonString = preferences.getString(key, null);
+        try {
+            return new Gson().fromJson(jsonString, clazz);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 56 - 0
app/src/main/java/com/miekir/ym/manager/UserInfoManager.java

@@ -0,0 +1,56 @@
+package com.miekir.ym.manager;
+
+
+import com.miekir.ym.bean.BeiUser;
+
+/**
+ *
+ *
+ * @author Miekir
+ * @date 2020/6/27 20:40
+ * Description: 用户信息
+ */
+public class UserInfoManager {
+    private static volatile UserInfoManager userInfoManager;
+    private UserInfoManager() {}
+    private BeiUser mBeiUser;
+
+    private boolean isLogin;
+
+    public static UserInfoManager getInstance() {
+        if (userInfoManager == null) {
+            init();
+        }
+
+        return userInfoManager;
+    }
+
+    private static synchronized void init() {
+        if (userInfoManager == null) {
+            userInfoManager = new UserInfoManager();
+        }
+    }
+
+    public BeiUser getBeiUser() {
+        if (mBeiUser == null) {
+            // 从本地拿
+            mBeiUser = PreferenceManager.getInstance().getObject(PreferenceManager.KEY_USER, BeiUser.class);
+        }
+
+        return mBeiUser;
+    }
+
+    public void setBeiUser(BeiUser beiUser) {
+        this.mBeiUser = beiUser;
+        // 保存到本地
+        PreferenceManager.getInstance().putSerializable(PreferenceManager.KEY_USER, beiUser);
+    }
+
+    public boolean isLogin() {
+        return getBeiUser() != null;
+    }
+
+    public void setLogin(boolean login) {
+        isLogin = login;
+    }
+}

+ 115 - 0
app/src/main/java/com/miekir/ym/ui/coupon/CouponAdapter.java

@@ -0,0 +1,115 @@
+package com.miekir.ym.ui.coupon;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.target.SimpleTarget;
+import com.bumptech.glide.request.transition.Transition;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.miekir.common.utils.ActivityTool;
+import com.miekir.common.utils.ToastTool;
+import com.miekir.ym.R;
+import com.miekir.ym.manager.UserInfoManager;
+import com.miekir.ym.listener.ItemLongClickListener;
+
+import java.util.List;
+
+
+/**
+ * @author Miekir
+ * @date 2020/7/6 20:08
+ * Description: 首页商品适配器
+ */
+public class CouponAdapter extends BaseQuickAdapter<CouponBean, BaseViewHolder> {
+    private int mRadius = 8;
+    private Context mContext;
+
+    public CouponAdapter(Context context, @Nullable List<CouponBean> data) {
+        super(R.layout.item_template, data);
+        mRadius = (int) context.getResources().getDimension(R.dimen.margin_s);
+        mContext = context;
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, CouponBean couponBean) {
+        ImageView iv_template = holder.getView(R.id.iv_template);
+        // 解决图片错乱
+        iv_template.setTag(R.id.iv_template, couponBean.coverUrl);
+        if (couponBean.isCoverUrlLocal) {
+            int resourceId = Integer.parseInt(couponBean.coverUrl);
+            iv_template.setScaleType(ImageView.ScaleType.CENTER_CROP);
+            iv_template.setImageResource(resourceId);
+        } else {
+            // 圆角
+            Glide.with(mContext).load(couponBean.coverUrl)
+                    //先加载原图大小的十分之一
+                    .thumbnail(0.1f)
+                    .into(new SimpleTarget<Drawable>() {
+                        @Override
+                        public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
+                            if (resource == null) {
+                                iv_template.setImageResource(R.mipmap.logo_gray);
+                                return;
+                            }
+
+                            String coverUrl = null;
+                            try {
+                                coverUrl = (String) iv_template.getTag(R.id.iv_template);
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                            if (TextUtils.isEmpty(coverUrl) || !TextUtils.equals(coverUrl, couponBean.coverUrl)) {
+                                iv_template.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+                                iv_template.setImageResource(R.mipmap.logo_gray);
+                            } else {
+                                iv_template.setScaleType(ImageView.ScaleType.CENTER_CROP);
+                                iv_template.setImageDrawable(resource);
+                            }
+                        }
+                    });
+        }
+
+
+        holder.setText(R.id.tv_template, couponBean.couponName);
+        holder.setOnClickListener(R.id.rl_template, new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (!couponBean.actionEnable) {
+                    ToastTool.showShort("敬请期待");
+                    return;
+                }
+
+                ActivityTool.openUrl((Activity) mContext, couponBean.jumpUrl);
+            }
+        });
+
+        View view = holder.getView(R.id.rl_template);
+        view.setOnLongClickListener(v -> {
+            if (UserInfoManager.getInstance().isLogin() &&
+                    TextUtils.equals("[email protected]", UserInfoManager.getInstance().getBeiUser().email)) {
+                if (couponLongClickListener != null) {
+                    couponLongClickListener.onItemLongClick(holder.getLayoutPosition());
+                }
+            }
+            return false;
+        });
+    }
+
+    private ItemLongClickListener couponLongClickListener;
+    public ItemLongClickListener getCouponLongClickListener() {
+        return couponLongClickListener;
+    }
+
+    public void setCouponLongClickListener(ItemLongClickListener couponListener) {
+        this.couponLongClickListener = couponListener;
+    }
+}

+ 68 - 0
app/src/main/java/com/miekir/ym/ui/coupon/CouponBean.java

@@ -0,0 +1,68 @@
+package com.miekir.ym.ui.coupon;
+
+import com.miekir.ym.constant.ConstantUrl;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ * @author Miekir
+ * @date 2020/7/7 19:37
+ * Description: 优惠券实体
+ */
+public class CouponBean implements Serializable {
+    /**
+     * 模板Id
+     */
+    public long id;
+    /**
+     * 模板类型
+     */
+    public int couponType;
+
+    /**
+     * 模板名称
+     */
+    public String couponName;
+    /**
+     * 点击之后跳转的链接
+     */
+    public String jumpUrl;
+    /**
+     * 封面图片URL
+     */
+    public String coverUrl = ConstantUrl.URL_RANDOM_PHOTO_WALLPAPER;
+
+
+    /**
+     * 是否可以响应点击
+     */
+    public boolean actionEnable;
+
+    /**是否是本地写死的数据*/
+    public boolean isLocal;
+
+    /**
+     * 创建时间
+     */
+    public long createTimeMillis;
+
+    /**
+     * 更新时间
+     */
+    public long updateTimeMillis;
+
+    public boolean isCoverUrlLocal;
+
+    public void updateData(CouponBean couponBean) {
+        this.couponType = couponBean.couponType;
+        this.couponName = couponBean.couponName;
+        this.coverUrl = couponBean.coverUrl;
+        this.jumpUrl = couponBean.jumpUrl;
+        this.actionEnable = couponBean.actionEnable;
+        this.isLocal = couponBean.isLocal;
+        this.createTimeMillis = couponBean.createTimeMillis;
+        this.updateTimeMillis = couponBean.updateTimeMillis;
+    }
+}

+ 79 - 0
app/src/main/java/com/miekir/ym/ui/coupon/CouponPresenter.java

@@ -0,0 +1,79 @@
+package com.miekir.ym.ui.coupon;
+
+import android.text.TextUtils;
+
+import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.network.RetrofitHelper;
+import com.miekir.network.base.BaseResponse;
+import com.miekir.network.widget.observe.MvpObserver;
+import com.miekir.network.widget.observe.NetMvpObserver;
+import com.miekir.ym.base.ApiService;
+
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ *
+ *
+ * @author Miekir
+ * @date 2020/7/8 19:43
+ * Description: 模板的Presenter
+ */
+public class CouponPresenter extends BasePresenter<ICouponView<CouponBean>> {
+
+    public void getTemplateData(int pageNum, int pageSize) {
+        NetMvpObserver<List<CouponBean>> disposable = new NetMvpObserver<List<CouponBean>>() {
+            @Override
+            public void onSuccess(int code, List<CouponBean> result) {
+                post(view -> view.onCouponDataCome(true, "", result));
+            }
+
+            @Override
+            public void onFailure(int code, Throwable e, String errMsg) {
+                post(view -> view.onCouponDataCome(false,
+                        TextUtils.isEmpty(errMsg) ? "获取失败:"+e.getMessage() : errMsg,
+                        null));
+            }
+        };
+
+        RetrofitHelper.getInstance()
+                .getRequestApi(ApiService.class)
+                .getCouponList(pageNum, pageSize)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(disposable);
+
+        mProgressDisposableList.add(disposable);
+    }
+
+
+    public void deleteCouponById(int position, long couponId) {
+        NetMvpObserver<String> disposable = new NetMvpObserver<String>() {
+            @Override
+            public void onSuccess(int code, String result) {
+                post(view -> view.onDeleteCoupon(true, result, position));
+            }
+
+            @Override
+            public void onFailure(int code, Throwable e, String errMsg) {
+                post(view -> view.onDeleteCoupon(false, TextUtils.isEmpty(errMsg) ? "删除失败:"+e.getMessage() : errMsg, position));
+            }
+        };
+        RetrofitHelper.getInstance()
+                .getRequestApi(ApiService.class)
+                .deleteCouponById(couponId)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(disposable);
+        mProgressDisposableList.add(disposable);
+    }
+
+    @Override
+    public void onInit() {
+
+    }
+}

+ 17 - 0
app/src/main/java/com/miekir/ym/ui/coupon/ICouponView.java

@@ -0,0 +1,17 @@
+package com.miekir.ym.ui.coupon;
+
+import com.miekir.mvp.view.IView;
+
+import java.util.List;
+
+/**
+ *
+ *
+ * @author Miekir
+ * @date 2020/7/8 19:44
+ * Description: Template的View
+ */
+public interface ICouponView<T> extends IView {
+    void onCouponDataCome(boolean success, String message, List<T> couponBeanList);
+    void onDeleteCoupon(boolean success, String message, int position);
+}

+ 7 - 0
app/src/main/res/drawable-v21/ripple_click.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ripple
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:color="@color/gray_divider_light_transparent"
+    tools:ignore="NewApi" />
+<!--上面就是点击时的ripple颜色-->

+ 6 - 0
app/src/main/res/drawable-v21/selectable_item_background.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <!--<item android:state_pressed="false" android:drawable="@android:color/transparent" />
+    <item android:drawable="@color/gray_divider_light_transparent" />-->
+    <item android:drawable="@drawable/ripple_click" />
+</selector>

+ 5 - 0
app/src/main/res/drawable/selectable_item_background.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="false" android:drawable="@android:color/transparent" />
+    <item android:drawable="@color/gray_divider_light_transparent" />
+</selector>

+ 18 - 0
app/src/main/res/layout/fragment_coupon.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+        android:id="@+id/srl_template"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+        <!--去掉下拉阴影android:overScrollMode="never"-->
+        <androidx.recyclerview.widget.RecyclerView
+            android:overScrollMode="never"
+            android:id="@+id/rv_template"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+</LinearLayout>

+ 57 - 0
app/src/main/res/layout/item_template.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/width_stroke"
+        android:background="@color/green_divider" />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <View
+            android:layout_width="@dimen/width_stroke"
+            android:layout_height="match_parent"
+            android:background="@color/green_divider" />
+        <FrameLayout
+            android:id="@+id/rl_template"
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:background="@color/white"
+            android:foreground="@drawable/selectable_item_background">
+            <ImageView
+                android:id="@+id/iv_template"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/height_cover"
+                android:src="@mipmap/logo_gray" />
+            <TextView
+                android:id="@+id/tv_template"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_margin="0.4dp"
+                android:paddingStart="@dimen/margin_s"
+                android:paddingEnd="@dimen/margin_s"
+                android:paddingTop="@dimen/margin_ss"
+                android:paddingBottom="@dimen/margin_ss"
+                android:layout_gravity="bottom"
+                android:textColor="@color/white"
+                android:textSize="@dimen/text_normal"
+                android:background="@color/black_light_transparent"/>
+        </FrameLayout>
+        <View
+            android:layout_width="@dimen/width_stroke"
+            android:layout_height="match_parent"
+            android:background="@color/green_divider" />
+    </LinearLayout>
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/width_stroke"
+        android:background="@color/green_divider" />
+
+
+</LinearLayout>
+

+ 2 - 0
build.gradle

@@ -19,6 +19,8 @@ allprojects {
     repositories {
         google()
         jcenter()
+        maven { url "https://jitpack.io" }
+        maven { url 'https://dl.bintray.com/umsdk/release' }
     }
 }
 

+ 6 - 8
network/src/main/java/com/miekir/network/widget/observe/MvpObserver.java

@@ -14,24 +14,22 @@ import io.reactivex.observers.DisposableObserver;
  * 用于可见,可手动取消的网络任务
  */
 public abstract class MvpObserver<T> extends DisposableObserver<T> {
-    private boolean mWithLoading;
     private BasePresenter<?> mPresenter;
 
-    public MvpObserver(final BasePresenter<?> presenter) {
-        this(presenter, false);
+    public MvpObserver() {
+        this(null);
     }
 
-    public MvpObserver(final BasePresenter<?> presenter, final boolean withLoading) {
-        mWithLoading = withLoading;
+    public MvpObserver(final BasePresenter<?> presenter) {
         mPresenter = presenter;
-        if (mPresenter != null && withLoading) {
+        if (mPresenter != null) {
             presenter.showProgress();
         }
     }
 
     @Override
     public void onNext(T t) {
-        if (mPresenter != null && mWithLoading) {
+        if (mPresenter != null) {
             mPresenter.hideProgress();
         }
         onSuccess(Code.SUCCESS, t);
@@ -42,7 +40,7 @@ public abstract class MvpObserver<T> extends DisposableObserver<T> {
 
     @Override
     public void onError(Throwable e) {
-        if (mWithLoading) {
+        if (mPresenter != null) {
             mPresenter.hideProgress();
         }
         e.printStackTrace();

+ 7 - 8
network/src/main/java/com/miekir/network/widget/observe/NetMvpObserver.java

@@ -6,6 +6,7 @@ import com.miekir.network.constant.Code;
 import com.miekir.network.utils.ExceptionUtil;
 
 import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.Disposable;
 import io.reactivex.observers.DisposableObserver;
 
 /**
@@ -15,24 +16,22 @@ import io.reactivex.observers.DisposableObserver;
  */
 public abstract class NetMvpObserver<T> extends DisposableObserver<BaseResponse<T>> {
 
-    private boolean mWithLoading;
     private BasePresenter<?> mPresenter;
 
-    public NetMvpObserver(final BasePresenter<?> presenter) {
-        this(presenter, false);
+    public NetMvpObserver() {
+        this(null);
     }
 
-    public NetMvpObserver(final BasePresenter<?> presenter, final boolean withLoading) {
-        mWithLoading = withLoading;
+    public NetMvpObserver(final BasePresenter<?> presenter) {
         mPresenter = presenter;
-        if (withLoading) {
+        if (mPresenter != null) {
             presenter.showProgress();
         }
     }
 
     @Override
     public void onNext(@NonNull BaseResponse<T> response) {
-        if (mPresenter != null && mWithLoading) {
+        if (mPresenter != null) {
             mPresenter.hideProgress();
         }
         try {
@@ -54,7 +53,7 @@ public abstract class NetMvpObserver<T> extends DisposableObserver<BaseResponse<
 
     @Override
     public void onError(@NonNull Throwable e) {
-        if (mPresenter != null && mWithLoading) {
+        if (mPresenter != null) {
             mPresenter.hideProgress();
         }
         e.printStackTrace();