Administrator
2021-11-11 dadbf7a3fd20a8e0dc7e0601f30a2f696cc9fc6e
完成登录接口接入demo
6 files modified
119 ■■■■ changed files
app/build.gradle 4 ●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/retrofit/Interceptor/HttpLoggingInterceptor.java 8 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/retrofit/api/LoginApiCenter.java 9 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/login/data/LoginDataSource.java 11 ●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/login/view/LoginActivity.java 49 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/login/view/LoginViewModel.java 38 ●●●●● patch | view | raw | blame | history
app/build.gradle
@@ -70,8 +70,8 @@
    implementation 'com.ansen.http:okhttpencapsulation:1.0.1'//版本更新下载
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    //RXjava和retrofit结合
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'    //RXjava和retrofit结合
    implementation 'com.permissionx.guolindev:permissionx:1.2.2'    //权限依赖让你推广你就发群里?没有别的群了?
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
app/src/main/java/com/duqing/missions/retrofit/Interceptor/HttpLoggingInterceptor.java
@@ -51,13 +51,15 @@
        int position = logArrays.size() +2;
        Response response;
        try {
            request = encryptRequest(request);//加密
            //request = encryptRequest(request);//加密
            response = chain.proceed(request);
            logArrays.addAll(getResponseLog(response));
            Log.d(TAG,"hashcode:"+hashCode);
            NetWorkCost netWorkCost = NetWorkListenear.workCostMap.get(hashCode);
            String cost = String.format("dns:%s,secure:%s,connect:%s,requestH:%s,requestB:%s,responseH:%s,responseB:%s",  convertTimes(netWorkCost.dns) ,convertTimes(netWorkCost.secure) , convertTimes(netWorkCost.connect),convertTimes(netWorkCost.requestHeader),convertTimes(netWorkCost.requestBody) ,convertTimes(netWorkCost.resposeHeader),convertTimes(netWorkCost.resposeBody)    );
            logArrays.add(position,"<-- costtimes : "+convertTimes(netWorkCost.total)+" (" +cost + ')');
            if(netWorkCost != null) {
                String cost = String.format("dns:%s,secure:%s,connect:%s,requestH:%s,requestB:%s,responseH:%s,responseB:%s", convertTimes(netWorkCost.dns), convertTimes(netWorkCost.secure), convertTimes(netWorkCost.connect), convertTimes(netWorkCost.requestHeader), convertTimes(netWorkCost.requestBody), convertTimes(netWorkCost.resposeHeader), convertTimes(netWorkCost.resposeBody));
                logArrays.add(position, "<-- costtimes : " + convertTimes(netWorkCost.total) + " (" + cost + ')');
            }
            NetWorkListenear.workCostMap.remove(hashCode);
            new Thread(){
                @Override
app/src/main/java/com/duqing/missions/retrofit/api/LoginApiCenter.java
@@ -1,7 +1,8 @@
package com.duqing.missions.retrofit.api;
import com.duqing.missions.ui.login.data.model.LoggedInUser;
import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
@@ -13,9 +14,5 @@
    @FormUrlEncoded
    @POST("api/v1/login")
    Observable<Object> login(@Field("paramString") String str);
    @FormUrlEncoded
    @POST("api/v1/login")
    Call<Object> loginCall(@Field("paramString") String str);
    Observable<LoggedInUser> login(@Field("paramsString") String str);
}
app/src/main/java/com/duqing/missions/ui/login/data/LoginDataSource.java
@@ -1,6 +1,8 @@
package com.duqing.missions.ui.login.data;
import com.duqing.missions.retrofit.RetrofitUtils;
import com.duqing.missions.retrofit.api.LoginApiCenter;
import com.duqing.missions.ui.login.data.model.LoggedInUser;
import io.reactivex.Observable;
@@ -13,14 +15,7 @@
public class LoginDataSource {
    public Observable<LoggedInUser> login(String username, String password) {
        final Observable<LoggedInUser> observable = Observable.create(new ObservableOnSubscribe<LoggedInUser>() {
            @Override
            public void subscribe(ObservableEmitter<LoggedInUser> e) throws Exception {
                LoggedInUser fakeUser = new LoggedInUser( java.util.UUID.randomUUID().toString(), "Jane Doe");
                e.onNext(fakeUser);
            }
        });
        return  observable;
        return  RetrofitUtils.getInstance().getRetrofit(LoginApiCenter.class).login(";lajks;dkfjal;ksjdf");
    }
    public Observable<LoggedInUser> loginByCode(String phone, String verifyCode){
app/src/main/java/com/duqing/missions/ui/login/view/LoginActivity.java
@@ -21,12 +21,6 @@
import com.duqing.missions.R;
import com.duqing.missions.base.activities.BaseTitleBarActivity;
import com.duqing.missions.databinding.ActivityLoginBinding;
import com.duqing.missions.retrofit.RetrofitUtils;
import com.duqing.missions.retrofit.api.LoginApiCenter;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class LoginActivity extends BaseTitleBarActivity<ActivityLoginBinding,LoginViewModel> {
@@ -122,48 +116,7 @@
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*RetrofitUtils.getInstance().getRetrofit(LoginApiCenter.class).login(";lajks;dkfjal;ksjdf")
                        .subscribeOn(Schedulers.io())//指定网络请求在io后台线程中进行
                        .observeOn(AndroidScheduler.mainThread())//指定observer回调在UI主线程中进行
                        .subscribe(new io.reactivex.Observer<Object>() {
                            @Override
                            public void onSubscribe(Disposable d) {
                                v.setEnabled(false);
                                Log.d(TAG,"onSubscribe");
                            }
                            @Override
                            public void onNext(Object value) {
                                Log.d(TAG,"onNext value:"+value);
                            }
                            @Override
                            public void onError(Throwable e) {
                                v.setEnabled(true);
                                Log.d(TAG,"onError "+e.getMessage());
                            }
                            @Override
                            public void onComplete() {
                                v.setEnabled(true);
                                Log.d(TAG,"onComplete");
                            }
                        });//发起请求,请求的结果会回调到订阅者observer中*/
                RetrofitUtils.getInstance().getRetrofit(LoginApiCenter.class).loginCall("asdfasdfasdfasdfasdf").enqueue(new Callback<Object>() {
                    @Override
                    public void onResponse(Call<Object> call, Response<Object> response) {
                    }
                    @Override
                    public void onFailure(Call<Object> call, Throwable t) {
                    }
                });
                viewModel.login(phoneEdit.getText().toString(),passwordEditText.getText().toString());
            }
        });
app/src/main/java/com/duqing/missions/ui/login/view/LoginViewModel.java
@@ -8,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;
@@ -15,6 +16,7 @@
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 {
@@ -39,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) {