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