From dadbf7a3fd20a8e0dc7e0601f30a2f696cc9fc6e Mon Sep 17 00:00:00 2001 From: Administrator <123> Date: Thu, 11 Nov 2021 02:40:05 +0000 Subject: [PATCH] 完成登录接口接入demo --- app/src/main/java/com/duqing/missions/ui/login/view/LoginViewModel.java | 70 ++++++++++++++++++++++++++--------- 1 files changed, 52 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/duqing/missions/ui/login/view/LoginViewModel.java b/app/src/main/java/com/duqing/missions/ui/login/view/LoginViewModel.java index 63f177a..d24f341 100644 --- a/app/src/main/java/com/duqing/missions/ui/login/view/LoginViewModel.java +++ b/app/src/main/java/com/duqing/missions/ui/login/view/LoginViewModel.java @@ -1,5 +1,6 @@ package com.duqing.missions.ui.login.view; +import android.os.CountDownTimer; import android.util.Patterns; import androidx.lifecycle.LiveData; @@ -7,6 +8,7 @@ import androidx.lifecycle.ViewModel; import com.duqing.missions.R; +import com.duqing.missions.retrofit.AndroidScheduler; import com.duqing.missions.ui.login.data.LoginRepository; import com.duqing.missions.ui.login.data.model.LoggedInUser; @@ -14,12 +16,15 @@ import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; import io.reactivex.observers.DisposableObserver; +import io.reactivex.schedulers.Schedulers; public class LoginViewModel extends ViewModel { private MutableLiveData<LoginFormState> loginFormState = new MutableLiveData<>(); private MutableLiveData<LoginResult> loginResult = new MutableLiveData<>(); private LoginRepository loginRepository; + private MutableLiveData<Long> countDown = new MutableLiveData<>(); + private CountDownTimer timer; LoginViewModel(LoginRepository loginRepository) { this.loginRepository = loginRepository; @@ -36,28 +41,30 @@ public void login(String username, String password) { // can be launched in a separate asynchronous job Observable<LoggedInUser> result = loginRepository.login(username, password); - result.doOnSubscribe(new Consumer<Disposable>() { - @Override - public void accept(Disposable disposable) throws Exception { + result.subscribeOn(Schedulers.io())//指定网络请求在io后台线程中进行 + .observeOn(AndroidScheduler.mainThread())//指定observer回调在UI主线程中进行 + .doOnSubscribe(new Consumer<Disposable>() { + @Override + public void accept(Disposable disposable) throws Exception { - } - }).subscribe(new DisposableObserver<LoggedInUser>(){ + } + }).subscribe(new DisposableObserver<LoggedInUser>(){ - @Override - public void onNext(LoggedInUser value) { - loginResult.setValue(new LoginResult((new LoggedInUserView(value.getDisplayName())))); - } + @Override + public void onNext(LoggedInUser value) { + loginResult.setValue(new LoginResult((new LoggedInUserView(value.getDisplayName())))); + } - @Override - public void onError(Throwable e) { - loginResult.setValue(new LoginResult(R.string.login_failed)); - } + @Override + public void onError(Throwable e) { + loginResult.setValue(new LoginResult(R.string.login_failed)); + } - @Override - public void onComplete() { + @Override + public void onComplete() { - } - }); + } + }); } public void loginDataChanged(String username, String password) { @@ -86,4 +93,31 @@ private boolean isPasswordValid(String password) { return password != null && password.trim().length() > 5; } -} \ No newline at end of file + + public MutableLiveData<Long> getCountDown() { + return countDown; + } + + /** + * 启动倒计时 + * @param consumedTime + */ + public void startCountDown(long consumedTime){ + //倒计时 + timer = new CountDownTimer(60 * 1000-consumedTime, 1000) { + + @Override + public void onTick(long l) { + countDown.postValue(l / 1000); + } + + @Override + public void onFinish() { + countDown.setValue(0l); + } + }; + timer.start(); + } + + +} -- Gitblit v1.9.1