| | |
| | | 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' |
| | |
| | | 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 |
| | |
| | | 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; |
| | |
| | | |
| | | @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); |
| | | } |
| | |
| | | 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; |
| | |
| | | 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){ |
| | |
| | | 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> { |
| | |
| | | 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()); |
| | | } |
| | | }); |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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 { |
| | | |
| | |
| | | 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) { |