fix:
update:闹钟界面缓存
This commit is contained in:
2022-09-05 20:22:57 +08:00
parent 6738ce181f
commit 059e0e1fee
11 changed files with 269 additions and 70 deletions

View File

@@ -42,6 +42,8 @@ import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
public class NoticeActivity extends AppCompatActivity { public class NoticeActivity extends AppCompatActivity {
private String TAG = NoticeActivity.class.getSimpleName();
@BindView(R.id.tv_title) @BindView(R.id.tv_title)
TextView tv_title; TextView tv_title;
@BindView(R.id.bt_ok) @BindView(R.id.bt_ok)
@@ -56,11 +58,9 @@ public class NoticeActivity extends AppCompatActivity {
ImageView imageView; ImageView imageView;
private AlarmClockData alarmClockData; private AlarmClockData alarmClockData;
int code; private int code;
private MediaPlayer mediaPlayer; private MediaPlayer mediaPlayer;
private String TAG = NoticeActivity.class.getSimpleName();
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

View File

@@ -12,6 +12,7 @@ import com.uiui.aios.bean.AlarmClockData;
import com.uiui.aios.bean.BaseResponse; import com.uiui.aios.bean.BaseResponse;
import com.uiui.aios.network.NetInterfaceManager; import com.uiui.aios.network.NetInterfaceManager;
import com.uiui.aios.alarm.AlarmUtils; import com.uiui.aios.alarm.AlarmUtils;
import com.uiui.aios.utils.ToastUtil;
import java.util.List; import java.util.List;
@@ -21,11 +22,12 @@ import cn.jzvd.Jzvd;
import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
public class AlarmClockActivity extends BaseActivity { public class AlarmClockActivity extends BaseActivity implements AlarmClockContact.ClockView {
@BindView(R.id.recyclerView) @BindView(R.id.recyclerView)
RecyclerView recyclerView; RecyclerView recyclerView;
private AlarmClockPresenter mPresenter;
private AlarmAdapter mAlarmAdapter; private AlarmAdapter mAlarmAdapter;
@Override @Override
@@ -36,6 +38,10 @@ public class AlarmClockActivity extends BaseActivity {
@Override @Override
public void initView() { public void initView() {
ButterKnife.bind(this); ButterKnife.bind(this);
mPresenter = new AlarmClockPresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(lifecycleSubject);
mAlarmAdapter = new AlarmAdapter(); mAlarmAdapter = new AlarmAdapter();
recyclerView.setLayoutManager(new LinearLayoutManager(AlarmClockActivity.this)); recyclerView.setLayoutManager(new LinearLayoutManager(AlarmClockActivity.this));
recyclerView.setAdapter(mAlarmAdapter); recyclerView.setAdapter(mAlarmAdapter);
@@ -44,36 +50,23 @@ public class AlarmClockActivity extends BaseActivity {
@Override @Override
public void initData() { public void initData() {
NetInterfaceManager.getInstance().getAlarmClockApiObservable() mPresenter.getAlarmClock();
.subscribe(new Observer<BaseResponse<List<AlarmClockData>>>() { }
@Override
public void onSubscribe(Disposable d) {
Log.e("getAlarmClock", "onSubscribe: ");
}
@Override @Override
public void onNext(BaseResponse<List<AlarmClockData>> listBaseResponse) { public void showAlarmClock(List<AlarmClockData> alarmClockData) {
Log.e("getAlarmClock", "onNext: " + listBaseResponse); AlarmUtils.getInstance().setAlarmClockData(alarmClockData);
if (listBaseResponse.code == 200) { mAlarmAdapter.setAlarmClockData(alarmClockData);
List<AlarmClockData> data = listBaseResponse.data; }
AlarmUtils.getInstance().setAlarmClockData(data);
mAlarmAdapter.setAlarmClockData(data);
} else {
mAlarmAdapter.setAlarmClockData(null);
}
}
@Override @Override
public void onError(Throwable e) { public void setAlarmClockEmpty() {
Log.e("getAlarmClock", "onError: " + e.getMessage()); mAlarmAdapter.setAlarmClockData(null);
onComplete(); }
}
@Override @Override
public void onComplete() { public void onError() {
Log.e("getAlarmClock", "onComplete: "); ToastUtil.show("服务器连接失败,检查网络连接");
}
});
} }
@Override @Override

View File

@@ -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<ClockView> {
void getAlarmClock();
}
public interface ClockView extends BaseView {
void showAlarmClock(List<AlarmClockData> alarmClockData);
void setAlarmClockEmpty();
void onError();
}
}

View File

@@ -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<ActivityEvent> lifecycle;
void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> 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<AlarmClockData> alarmClockList) {
mView.showAlarmClock(alarmClockList);
}
@Override
public void setAlarmClockEmpty() {
mView.setAlarmClockEmpty();
}
@Override
public void onError() {
mView.onError();
}
});
}
}

View File

@@ -93,29 +93,24 @@ public class HealthCodeActivity extends BaseActivity implements HealthCodeContac
@Override @Override
public void setHealthCode(List<HealthCode> codeList) { public void setHealthCode(List<HealthCode> codeList) {
NetInterfaceManager.getInstance().getHealthCode(true, lifecycleSubject, new NetInterfaceManager.HealthCodeCallback() { setImageViews(codeList);
@Override mViewPager.setVisibility(View.VISIBLE);
public void setHealthCode(List<HealthCode> healthCode) { mMagicIndicator.setVisibility(View.VISIBLE);
setImageViews(healthCode); iv_nodata.setVisibility(View.GONE);
mViewPager.setVisibility(View.VISIBLE); }
mMagicIndicator.setVisibility(View.VISIBLE);
iv_nodata.setVisibility(View.GONE);
}
@Override @Override
public void noData() { public void setHealthCodeNodata() {
mViewPager.setVisibility(View.GONE); mViewPager.setVisibility(View.GONE);
mMagicIndicator.setVisibility(View.GONE); mMagicIndicator.setVisibility(View.GONE);
iv_nodata.setVisibility(View.VISIBLE); iv_nodata.setVisibility(View.VISIBLE);
} }
@Override @Override
public void onError() { public void onError() {
ToastUtil.show("网络连接失败"); ToastUtil.show("连接服务器失败,请检查网络连接");
mViewPager.setVisibility(View.GONE); // mViewPager.setVisibility(View.GONE);
mMagicIndicator.setVisibility(View.GONE); // mMagicIndicator.setVisibility(View.GONE);
iv_nodata.setVisibility(View.VISIBLE); // iv_nodata.setVisibility(View.VISIBLE);
}
});
} }
} }

View File

@@ -13,5 +13,7 @@ public class HealthCodeContact {
public interface CodeView extends BaseView { public interface CodeView extends BaseView {
void setHealthCode(List<HealthCode> codeList); void setHealthCode(List<HealthCode> codeList);
void setHealthCodeNodata();
void onError();
} }
} }

View File

@@ -2,10 +2,16 @@ package com.uiui.aios.activity.code;
import android.content.Context; import android.content.Context;
import android.util.Log; import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.trello.rxlifecycle4.android.ActivityEvent; 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; import io.reactivex.rxjava3.subjects.BehaviorSubject;
@@ -44,6 +50,21 @@ public class HealthCodePresenter implements HealthCodeContact.Presenter {
@Override @Override
public void getHealthCode() { public void getHealthCode() {
NetInterfaceManager.getInstance().getHealthCode(true, getLifecycle(), new NetInterfaceManager.HealthCodeCallback() {
@Override
public void setHealthCode(List<HealthCode> healthCode) {
mView.setHealthCode(healthCode);
}
@Override
public void noData() {
mView.setHealthCodeNodata();
}
@Override
public void onError() {
mView.onError();
}
});
} }
} }

View File

@@ -15,6 +15,7 @@ import com.tencent.android.tpush.XGPushConfig;
import com.tencent.android.tpush.XGPushManager; import com.tencent.android.tpush.XGPushManager;
import com.tencent.mmkv.MMKV; import com.tencent.mmkv.MMKV;
import com.uiui.aios.BuildConfig; import com.uiui.aios.BuildConfig;
import com.uiui.aios.manager.ConnectManager;
import com.uiui.aios.network.NetInterfaceManager; import com.uiui.aios.network.NetInterfaceManager;
import com.uiui.aios.service.main.MainService; import com.uiui.aios.service.main.MainService;
import com.uiui.aios.alarm.AlarmUtils; import com.uiui.aios.alarm.AlarmUtils;
@@ -65,6 +66,7 @@ public class BaseApplication extends Application {
//切换至开发版服务 //切换至开发版服务
HeConfig.switchToDevService(); HeConfig.switchToDevService();
AmapManager.init(this); AmapManager.init(this);
ConnectManager.init(this);
NetInterfaceManager.init(this); NetInterfaceManager.init(this);
startService(new Intent(this, MainService.class)); startService(new Intent(this, MainService.class));
} }

View File

@@ -90,8 +90,13 @@ public class ConnectManager {
long nowTime = System.currentTimeMillis(); long nowTime = System.currentTimeMillis();
long lastTime = mMMKV.decodeLong(key, 0); long lastTime = mMMKV.decodeLong(key, 0);
long intervalTime = getConnectModeTime(connectMode); 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;
} }

View File

@@ -159,7 +159,7 @@ public class NetInterfaceManager {
* *
* @return * @return
*/ */
public Observable<BaseResponse<List<AlarmClockData>>> getAlarmClockApiObservable() { public Observable<BaseResponse<List<AlarmClockData>>> getAlarmClockObservable() {
return mRetrofit return mRetrofit
.create(AlarmClockApi.class) .create(AlarmClockApi.class)
.getAlarmClockApiApi(Utils.getSerial()) .getAlarmClockApiApi(Utils.getSerial())
@@ -326,27 +326,31 @@ public class NetInterfaceManager {
} }
public void getHealthCode(boolean refresh, BehaviorSubject<ActivityEvent> lifecycle, HealthCodeCallback callback) { public void getHealthCode(boolean refresh, BehaviorSubject<ActivityEvent> lifecycle, HealthCodeCallback callback) {
ConnectMode connectMode = ConnectMode.ONE_HOUR; ConnectMode connectMode = ConnectMode.ONE_MINUTE;
if (refresh) { if (refresh) {
connectMode = ConnectMode.DEFAULT; connectMode = ConnectMode.DEFAULT;
} }
if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_HEALTH_CODE, connectMode)) { if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_HEALTH_CODE, connectMode)) {
getHealthCode(lifecycle, callback); getHealthCode(lifecycle, callback);
} else { } else {
String jsonString = mCacheHelper.getAsString(URLAddress.GET_HEALTH_CODE); getHealthCodeCache(lifecycle, callback);
//为 "" 是已经请求成功的 }
if (jsonString == null) { }
getHealthCode(lifecycle, callback);
private void getHealthCodeCache(BehaviorSubject<ActivityEvent> 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<List<HealthCode>>() {
}.getType();
List<HealthCode> healthCodeList = gson.fromJson(jsonString, type);
if (healthCodeList == null || healthCodeList.size() == 0) {
callback.noData();
} else { } else {
Gson gson = new Gson(); callback.setHealthCode(healthCodeList);
Type type = new TypeToken<String>() {
}.getType();
List<HealthCode> healthCodeList = gson.fromJson(jsonString, type);
if (healthCodeList == null || healthCodeList.size() == 0) {
callback.noData();
} else {
callback.setHealthCode(healthCodeList);
}
} }
} }
} }
@@ -365,8 +369,10 @@ public class NetInterfaceManager {
Log.e("getHealthCode", "onNext: " + listBaseResponse); Log.e("getHealthCode", "onNext: " + listBaseResponse);
if (listBaseResponse.code == 200) { if (listBaseResponse.code == 200) {
List<HealthCode> healthCodeList = listBaseResponse.data; List<HealthCode> healthCodeList = listBaseResponse.data;
mCacheHelper.put(URLAddress.GET_HEALTH_CODE, GsonUtils.toJsonString(healthCodeList));
callback.setHealthCode(healthCodeList); callback.setHealthCode(healthCodeList);
} else { } else {
mCacheHelper.put(URLAddress.GET_HEALTH_CODE, "");
callback.noData(); callback.noData();
} }
} }
@@ -374,6 +380,7 @@ public class NetInterfaceManager {
@Override @Override
public void onError(@NonNull Throwable e) { public void onError(@NonNull Throwable e) {
Log.e("getHealthCode", "onError: "); Log.e("getHealthCode", "onError: ");
getHealthCodeCache(lifecycle, callback);
callback.onError(); callback.onError();
onComplete(); onComplete();
} }
@@ -386,4 +393,95 @@ public class NetInterfaceManager {
} }
public interface AlarmClockCallback {
void setAlarmClock(List<AlarmClockData> alarmClockList);
void setAlarmClockEmpty();
void onError();
}
public void getAlarmClock(boolean refresh, BehaviorSubject<ActivityEvent> 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<ActivityEvent> 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<List<AlarmClockData>>() {
}.getType();
List<AlarmClockData> list = gson.fromJson(jsonString, type);
if (list == null || list.size() == 0) {
callback.setAlarmClockEmpty();
} else {
callback.setAlarmClock(list);
}
}
}
public void getAlarmClock(BehaviorSubject<ActivityEvent> 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<BaseResponse<List<AlarmClockData>>> getAlarmClockObserver(AlarmClockCallback callback) {
return new Observer<BaseResponse<List<AlarmClockData>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getAlarmClockObserver", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<AlarmClockData>> listBaseResponse) {
Log.e("getAlarmClockObserver", "onNext: ");
if (listBaseResponse.code == 200) {
List<AlarmClockData> 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: ");
}
};
}
} }

View File

@@ -57,7 +57,7 @@ public class MainSPresenter implements MainSContact.Presenter {
@Override @Override
public void getAlarmClock() { public void getAlarmClock() {
NetInterfaceManager.getInstance().getAlarmClockApiObservable() NetInterfaceManager.getInstance().getAlarmClockObservable()
.subscribe(new Observer<BaseResponse<List<AlarmClockData>>>() { .subscribe(new Observer<BaseResponse<List<AlarmClockData>>>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {