From 059e0e1fee2114f8df3de0664db6ea8884110e0b Mon Sep 17 00:00:00 2001 From: fanhuitong <981964879@qq.com> Date: Mon, 5 Sep 2022 20:22:57 +0800 Subject: [PATCH] =?UTF-8?q?version:=20fix:=20update:=E9=97=B9=E9=92=9F?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uiui/aios/activity/NoticeActivity.java | 6 +- .../activity/alarm/AlarmClockActivity.java | 49 +++---- .../activity/alarm/AlarmClockContact.java | 19 +++ .../activity/alarm/AlarmClockPresenter.java | 64 +++++++++ .../activity/code/HealthCodeActivity.java | 39 +++--- .../aios/activity/code/HealthCodeContact.java | 2 + .../activity/code/HealthCodePresenter.java | 21 +++ .../com/uiui/aios/base/BaseApplication.java | 2 + .../com/uiui/aios/manager/ConnectManager.java | 7 +- .../aios/network/NetInterfaceManager.java | 128 ++++++++++++++++-- .../aios/service/main/MainSPresenter.java | 2 +- 11 files changed, 269 insertions(+), 70 deletions(-) create mode 100644 app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java create mode 100644 app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java diff --git a/app/src/main/java/com/uiui/aios/activity/NoticeActivity.java b/app/src/main/java/com/uiui/aios/activity/NoticeActivity.java index 94d2d75..25ce766 100644 --- a/app/src/main/java/com/uiui/aios/activity/NoticeActivity.java +++ b/app/src/main/java/com/uiui/aios/activity/NoticeActivity.java @@ -42,6 +42,8 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class NoticeActivity extends AppCompatActivity { + private String TAG = NoticeActivity.class.getSimpleName(); + @BindView(R.id.tv_title) TextView tv_title; @BindView(R.id.bt_ok) @@ -56,11 +58,9 @@ public class NoticeActivity extends AppCompatActivity { ImageView imageView; private AlarmClockData alarmClockData; - int code; + private int code; private MediaPlayer mediaPlayer; - private String TAG = NoticeActivity.class.getSimpleName(); - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java index 9eedb22..ff95ede 100644 --- a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java +++ b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java @@ -12,6 +12,7 @@ import com.uiui.aios.bean.AlarmClockData; import com.uiui.aios.bean.BaseResponse; import com.uiui.aios.network.NetInterfaceManager; import com.uiui.aios.alarm.AlarmUtils; +import com.uiui.aios.utils.ToastUtil; import java.util.List; @@ -21,11 +22,12 @@ import cn.jzvd.Jzvd; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class AlarmClockActivity extends BaseActivity { +public class AlarmClockActivity extends BaseActivity implements AlarmClockContact.ClockView { @BindView(R.id.recyclerView) RecyclerView recyclerView; + private AlarmClockPresenter mPresenter; private AlarmAdapter mAlarmAdapter; @Override @@ -36,6 +38,10 @@ public class AlarmClockActivity extends BaseActivity { @Override public void initView() { ButterKnife.bind(this); + mPresenter = new AlarmClockPresenter(this); + mPresenter.attachView(this); + mPresenter.setLifecycle(lifecycleSubject); + mAlarmAdapter = new AlarmAdapter(); recyclerView.setLayoutManager(new LinearLayoutManager(AlarmClockActivity.this)); recyclerView.setAdapter(mAlarmAdapter); @@ -44,36 +50,23 @@ public class AlarmClockActivity extends BaseActivity { @Override public void initData() { - NetInterfaceManager.getInstance().getAlarmClockApiObservable() - .subscribe(new Observer>>() { - @Override - public void onSubscribe(Disposable d) { - Log.e("getAlarmClock", "onSubscribe: "); - } + mPresenter.getAlarmClock(); + } - @Override - public void onNext(BaseResponse> listBaseResponse) { - Log.e("getAlarmClock", "onNext: " + listBaseResponse); - if (listBaseResponse.code == 200) { - List data = listBaseResponse.data; - AlarmUtils.getInstance().setAlarmClockData(data); - mAlarmAdapter.setAlarmClockData(data); - } else { - mAlarmAdapter.setAlarmClockData(null); - } - } + @Override + public void showAlarmClock(List alarmClockData) { + AlarmUtils.getInstance().setAlarmClockData(alarmClockData); + mAlarmAdapter.setAlarmClockData(alarmClockData); + } - @Override - public void onError(Throwable e) { - Log.e("getAlarmClock", "onError: " + e.getMessage()); - onComplete(); - } + @Override + public void setAlarmClockEmpty() { + mAlarmAdapter.setAlarmClockData(null); + } - @Override - public void onComplete() { - Log.e("getAlarmClock", "onComplete: "); - } - }); + @Override + public void onError() { + ToastUtil.show("服务器连接失败,检查网络连接"); } @Override diff --git a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java new file mode 100644 index 0000000..ce8385e --- /dev/null +++ b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java @@ -0,0 +1,19 @@ +package com.uiui.aios.activity.alarm; + +import com.uiui.aios.base.BasePresenter; +import com.uiui.aios.base.BaseView; +import com.uiui.aios.bean.AlarmClockData; + +import java.util.List; + +public class AlarmClockContact { + public interface Presenter extends BasePresenter { + void getAlarmClock(); + } + + public interface ClockView extends BaseView { + void showAlarmClock(List alarmClockData); + void setAlarmClockEmpty(); + void onError(); + } +} diff --git a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java new file mode 100644 index 0000000..3689ecf --- /dev/null +++ b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java @@ -0,0 +1,64 @@ +package com.uiui.aios.activity.alarm; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.aios.bean.AlarmClockData; +import com.uiui.aios.network.NetInterfaceManager; + +import java.util.List; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public class AlarmClockPresenter implements AlarmClockContact.Presenter { + + private AlarmClockContact.ClockView mView; + private Context mContext; + + AlarmClockPresenter(Context context) { + this.mContext = context; + } + + private BehaviorSubject lifecycle; + + void setLifecycle(BehaviorSubject lifecycle) { + this.lifecycle = lifecycle; + } + + public BehaviorSubject getLifecycle() { + return lifecycle; + } + + @Override + public void attachView(@NonNull AlarmClockContact.ClockView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } + + + @Override + public void getAlarmClock() { + NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { + @Override + public void setAlarmClock(List alarmClockList) { + mView.showAlarmClock(alarmClockList); + } + + @Override + public void setAlarmClockEmpty() { + mView.setAlarmClockEmpty(); + } + + @Override + public void onError() { + mView.onError(); + } + }); + } +} diff --git a/app/src/main/java/com/uiui/aios/activity/code/HealthCodeActivity.java b/app/src/main/java/com/uiui/aios/activity/code/HealthCodeActivity.java index e7f4884..fa8a2a3 100644 --- a/app/src/main/java/com/uiui/aios/activity/code/HealthCodeActivity.java +++ b/app/src/main/java/com/uiui/aios/activity/code/HealthCodeActivity.java @@ -93,29 +93,24 @@ public class HealthCodeActivity extends BaseActivity implements HealthCodeContac @Override public void setHealthCode(List codeList) { - NetInterfaceManager.getInstance().getHealthCode(true, lifecycleSubject, new NetInterfaceManager.HealthCodeCallback() { - @Override - public void setHealthCode(List healthCode) { - setImageViews(healthCode); - mViewPager.setVisibility(View.VISIBLE); - mMagicIndicator.setVisibility(View.VISIBLE); - iv_nodata.setVisibility(View.GONE); - } + setImageViews(codeList); + mViewPager.setVisibility(View.VISIBLE); + mMagicIndicator.setVisibility(View.VISIBLE); + iv_nodata.setVisibility(View.GONE); + } - @Override - public void noData() { - mViewPager.setVisibility(View.GONE); - mMagicIndicator.setVisibility(View.GONE); - iv_nodata.setVisibility(View.VISIBLE); - } + @Override + public void setHealthCodeNodata() { + mViewPager.setVisibility(View.GONE); + mMagicIndicator.setVisibility(View.GONE); + iv_nodata.setVisibility(View.VISIBLE); + } - @Override - public void onError() { - ToastUtil.show("网络连接失败"); - mViewPager.setVisibility(View.GONE); - mMagicIndicator.setVisibility(View.GONE); - iv_nodata.setVisibility(View.VISIBLE); - } - }); + @Override + public void onError() { + ToastUtil.show("连接服务器失败,请检查网络连接"); +// mViewPager.setVisibility(View.GONE); +// mMagicIndicator.setVisibility(View.GONE); +// iv_nodata.setVisibility(View.VISIBLE); } } diff --git a/app/src/main/java/com/uiui/aios/activity/code/HealthCodeContact.java b/app/src/main/java/com/uiui/aios/activity/code/HealthCodeContact.java index 8e6fc3a..1572a5c 100644 --- a/app/src/main/java/com/uiui/aios/activity/code/HealthCodeContact.java +++ b/app/src/main/java/com/uiui/aios/activity/code/HealthCodeContact.java @@ -13,5 +13,7 @@ public class HealthCodeContact { public interface CodeView extends BaseView { void setHealthCode(List codeList); + void setHealthCodeNodata(); + void onError(); } } diff --git a/app/src/main/java/com/uiui/aios/activity/code/HealthCodePresenter.java b/app/src/main/java/com/uiui/aios/activity/code/HealthCodePresenter.java index 3108ee7..6cdc816 100644 --- a/app/src/main/java/com/uiui/aios/activity/code/HealthCodePresenter.java +++ b/app/src/main/java/com/uiui/aios/activity/code/HealthCodePresenter.java @@ -2,10 +2,16 @@ package com.uiui.aios.activity.code; import android.content.Context; import android.util.Log; +import android.view.View; import androidx.annotation.NonNull; import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.aios.bean.HealthCode; +import com.uiui.aios.network.NetInterfaceManager; +import com.uiui.aios.utils.ToastUtil; + +import java.util.List; import io.reactivex.rxjava3.subjects.BehaviorSubject; @@ -44,6 +50,21 @@ public class HealthCodePresenter implements HealthCodeContact.Presenter { @Override public void getHealthCode() { + NetInterfaceManager.getInstance().getHealthCode(true, getLifecycle(), new NetInterfaceManager.HealthCodeCallback() { + @Override + public void setHealthCode(List healthCode) { + mView.setHealthCode(healthCode); + } + @Override + public void noData() { + mView.setHealthCodeNodata(); + } + + @Override + public void onError() { + mView.onError(); + } + }); } } diff --git a/app/src/main/java/com/uiui/aios/base/BaseApplication.java b/app/src/main/java/com/uiui/aios/base/BaseApplication.java index 447c493..525f967 100644 --- a/app/src/main/java/com/uiui/aios/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/aios/base/BaseApplication.java @@ -15,6 +15,7 @@ import com.tencent.android.tpush.XGPushConfig; import com.tencent.android.tpush.XGPushManager; import com.tencent.mmkv.MMKV; import com.uiui.aios.BuildConfig; +import com.uiui.aios.manager.ConnectManager; import com.uiui.aios.network.NetInterfaceManager; import com.uiui.aios.service.main.MainService; import com.uiui.aios.alarm.AlarmUtils; @@ -65,6 +66,7 @@ public class BaseApplication extends Application { //切换至开发版服务 HeConfig.switchToDevService(); AmapManager.init(this); + ConnectManager.init(this); NetInterfaceManager.init(this); startService(new Intent(this, MainService.class)); } diff --git a/app/src/main/java/com/uiui/aios/manager/ConnectManager.java b/app/src/main/java/com/uiui/aios/manager/ConnectManager.java index e7577dc..7d7ece1 100644 --- a/app/src/main/java/com/uiui/aios/manager/ConnectManager.java +++ b/app/src/main/java/com/uiui/aios/manager/ConnectManager.java @@ -90,8 +90,13 @@ public class ConnectManager { long nowTime = System.currentTimeMillis(); long lastTime = mMMKV.decodeLong(key, 0); long intervalTime = getConnectModeTime(connectMode); + //防止修改了时间一直返回false + if (lastTime > nowTime) { + return true; + } //防止一分钟内重复请求 - return nowTime - lastTime > intervalTime && nowTime - lastTime > ONE_MINUTES_TIME; + boolean refresh = nowTime - lastTime > intervalTime && nowTime - lastTime > ONE_MINUTES_TIME; + return refresh; } diff --git a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java index 625a371..1d9a23b 100644 --- a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java @@ -159,7 +159,7 @@ public class NetInterfaceManager { * * @return */ - public Observable>> getAlarmClockApiObservable() { + public Observable>> getAlarmClockObservable() { return mRetrofit .create(AlarmClockApi.class) .getAlarmClockApiApi(Utils.getSerial()) @@ -326,27 +326,31 @@ public class NetInterfaceManager { } public void getHealthCode(boolean refresh, BehaviorSubject lifecycle, HealthCodeCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_HOUR; + ConnectMode connectMode = ConnectMode.ONE_MINUTE; if (refresh) { connectMode = ConnectMode.DEFAULT; } if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_HEALTH_CODE, connectMode)) { getHealthCode(lifecycle, callback); } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_HEALTH_CODE); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getHealthCode(lifecycle, callback); + getHealthCodeCache(lifecycle, callback); + } + } + + private void getHealthCodeCache(BehaviorSubject lifecycle, HealthCodeCallback callback) { + String jsonString = mCacheHelper.getAsString(URLAddress.GET_HEALTH_CODE); + //为 "" 是已经请求成功的 + if (jsonString == null) { + getHealthCode(lifecycle, callback); + } else { + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + List healthCodeList = gson.fromJson(jsonString, type); + if (healthCodeList == null || healthCodeList.size() == 0) { + callback.noData(); } else { - Gson gson = new Gson(); - Type type = new TypeToken() { - }.getType(); - List healthCodeList = gson.fromJson(jsonString, type); - if (healthCodeList == null || healthCodeList.size() == 0) { - callback.noData(); - } else { - callback.setHealthCode(healthCodeList); - } + callback.setHealthCode(healthCodeList); } } } @@ -365,8 +369,10 @@ public class NetInterfaceManager { Log.e("getHealthCode", "onNext: " + listBaseResponse); if (listBaseResponse.code == 200) { List healthCodeList = listBaseResponse.data; + mCacheHelper.put(URLAddress.GET_HEALTH_CODE, GsonUtils.toJsonString(healthCodeList)); callback.setHealthCode(healthCodeList); } else { + mCacheHelper.put(URLAddress.GET_HEALTH_CODE, ""); callback.noData(); } } @@ -374,6 +380,7 @@ public class NetInterfaceManager { @Override public void onError(@NonNull Throwable e) { Log.e("getHealthCode", "onError: "); + getHealthCodeCache(lifecycle, callback); callback.onError(); onComplete(); } @@ -386,4 +393,95 @@ public class NetInterfaceManager { } + public interface AlarmClockCallback { + void setAlarmClock(List alarmClockList); + + void setAlarmClockEmpty(); + + void onError(); + } + + public void getAlarmClock(boolean refresh, BehaviorSubject lifecycle, AlarmClockCallback callback) { + ConnectMode connectMode = ConnectMode.ONE_MINUTE; + if (refresh) { + connectMode = ConnectMode.DEFAULT; + } + if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ALARM_CLOCK, connectMode)) { + getAlarmClock(lifecycle, callback); + } else { + getAlarmClockCache(lifecycle, callback); + } + } + + public void getAlarmClockCache(BehaviorSubject lifecycle, AlarmClockCallback callback) { + String jsonString = mCacheHelper.getAsString(URLAddress.GET_ALARM_CLOCK); + //为 "" 是已经请求成功的 + if (jsonString == null) { + getAlarmClock(lifecycle, callback); + } else { + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + List list = gson.fromJson(jsonString, type); + if (list == null || list.size() == 0) { + callback.setAlarmClockEmpty(); + } else { + callback.setAlarmClock(list); + } + } + } + + public void getAlarmClock(BehaviorSubject lifecycle, AlarmClockCallback callback) { + getAlarmClockObservable() + .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) + .subscribe(getAlarmClockObserver(callback)); + } + + public void getAlarmClock(AlarmClockCallback callback) { + getAlarmClockObservable() + .subscribe(getAlarmClockObserver(callback)); + } + + public void getAlarmClock() { + getAlarmClockObservable() + .subscribe(getAlarmClockObserver(null)); + } + + public Observer>> getAlarmClockObserver(AlarmClockCallback callback) { + return new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getAlarmClockObserver", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getAlarmClockObserver", "onNext: "); + if (listBaseResponse.code == 200) { + List alarmClockData = listBaseResponse.data; + if (alarmClockData != null && alarmClockData.size() != 0) { + if (callback != null) callback.setAlarmClock(alarmClockData); + } else { + if (callback != null) callback.setAlarmClockEmpty(); + } + mCacheHelper.put(URLAddress.GET_ALARM_CLOCK, GsonUtils.toJsonString(alarmClockData)); + } else { + mCacheHelper.put(URLAddress.GET_ALARM_CLOCK, ""); + if (callback != null) callback.setAlarmClockEmpty(); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getAlarmClockObserver", "onError: " + e.getMessage()); + if (callback != null) callback.onError(); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getAlarmClockObserver", "onComplete: "); + } + }; + } } diff --git a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java b/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java index 3a15ed3..7dff0fa 100644 --- a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java +++ b/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java @@ -57,7 +57,7 @@ public class MainSPresenter implements MainSContact.Presenter { @Override public void getAlarmClock() { - NetInterfaceManager.getInstance().getAlarmClockApiObservable() + NetInterfaceManager.getInstance().getAlarmClockObservable() .subscribe(new Observer>>() { @Override public void onSubscribe(Disposable d) {