android全局VIewModel,Android笔记之ViewModel的使用示例

依赖

implementation 'android.arch.lifecycle:extensions:1.1.1'

implementation 'com.squareup.retrofit2:retrofit:2.5.0'

implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'

implementation 'io.reactivex.rxjava2:rxjava:2.2.8'

implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

android.arch.lifecycle:extensions:1.1.1用于引用ViewModelProviders

455534ee49b2263882de29f0c30bbb8e.png

EyeKeyService.java

packagecom.bu_ish.viewmodeltest.service;importcom.bu_ish.viewmodeltest.reply.FaceCheckingReply;importcom.bu_ish.viewmodeltest.reply.FacesComparingReply;importio.reactivex.Single;importretrofit2.http.Field;importretrofit2.http.FormUrlEncoded;importretrofit2.http.GET;importretrofit2.http.POST;importretrofit2.http.Query;public interfaceEyeKeyService {

String BASE_URL= "http://api.eyekey.com/face/";

String APP_ID= "f89ae61fd63d4a63842277e9144a6bd2";

String APP_KEY= "af1cd33549c54b27ae24aeb041865da2";

@FormUrlEncoded

@POST("Check/checking")

Single checkFace(@Field("app_id") String appId, @Field("app_key") String appKey, @Field("url") String url);

@GET("Match/match_compare")

Single compareFaces(@Query("app_id") String appId, @Query("app_key") String appKey, @Query("face_id1") String faceId1, @Query("face_id2") String faceId2);

}

EyeKeyRepository.java

packagecom.bu_ish.viewmodeltest.view_model;importcom.bu_ish.viewmodeltest.service.EyeKeyService;importcom.bu_ish.viewmodeltest.reply.FaceCheckingReply;importcom.bu_ish.viewmodeltest.reply.FacesComparingReply;importio.reactivex.Single;importio.reactivex.android.schedulers.AndroidSchedulers;importio.reactivex.schedulers.Schedulers;importretrofit2.Retrofit;importretrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;importretrofit2.converter.gson.GsonConverterFactory;public classEyeKeyRepository {private static EyeKeyRepository instance = newEyeKeyRepository();privateEyeKeyService service;privateEyeKeyRepository() {

Retrofit retrofit= newRetrofit.Builder()

.baseUrl(EyeKeyService.BASE_URL)

.addConverterFactory(GsonConverterFactory.create())

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

.build();

service= retrofit.create(EyeKeyService.class);

}public staticEyeKeyRepository getInstance() {returninstance;

}public SinglecheckFace(String url) {returnsetScheduler(service.checkFace(EyeKeyService.APP_ID, EyeKeyService.APP_KEY, url));

}public SinglecompareFaces(String faceId1, String faceId2) {returnsetScheduler(service.compareFaces(EyeKeyService.APP_ID, EyeKeyService.APP_KEY, faceId1, faceId2));

}privateSingle setScheduler(Single single) {returnsingle.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread());

}

}

EyeKeyViewModel.java

packagecom.bu_ish.viewmodeltest.view_model;importandroid.arch.lifecycle.MutableLiveData;importandroid.arch.lifecycle.ViewModel;importcom.bu_ish.viewmodeltest.observer.ReplyObserver;importcom.bu_ish.viewmodeltest.reply.FaceCheckingReply;importcom.bu_ish.viewmodeltest.reply.FacesComparingReply;public class EyeKeyViewModel extendsViewModel {public MutableLiveData faceCheckingReply1Data = new MutableLiveData<>();public MutableLiveData faceCheckingReply2Data = new MutableLiveData<>();public MutableLiveData facesComparingReplyData = new MutableLiveData<>();privateDialogViewModel dialogViewModel;privateEyeKeyRepository eyeKeyRepository;publicEyeKeyViewModel(DialogViewModel dialogViewModel) {this.dialogViewModel =dialogViewModel;

eyeKeyRepository=EyeKeyRepository.getInstance();

}public voidcheckFace1(String url) {

eyeKeyRepository.checkFace(url).subscribe(new ReplyObserver(dialogViewModel) {

@Overridepublic voidonReply(FaceCheckingReply reply) {

faceCheckingReply1Data.setValue(reply);

}

});

}public voidcheckFace2(String url) {

eyeKeyRepository.checkFace(url).subscribe(new ReplyObserver(dialogViewModel) {

@Overridepublic voidonReply(FaceCheckingReply reply) {

faceCheckingReply2Data.setValue(reply);

}

});

}public voidcompareFaces(String faceId1, String faceId2) {

eyeKeyRepository.compareFaces(faceId1, faceId2).subscribe(new ReplyObserver(dialogViewModel) {

@Overridepublic voidonReply(FacesComparingReply reply) {

facesComparingReplyData.setValue(reply);

}

});

}

}

ReplyObserver.java

packagecom.bu_ish.viewmodeltest.observer;importcom.bu_ish.viewmodeltest.reply.BaseReply;importcom.bu_ish.viewmodeltest.view_model.DialogViewModel;importio.reactivex.SingleObserver;importio.reactivex.disposables.Disposable;public abstract class ReplyObserver implements SingleObserver{public abstract voidonReply(T reply);privateDialogViewModel dialogViewModel;publicReplyObserver(DialogViewModel dialogViewModel) {this.dialogViewModel =dialogViewModel;

}

@Overridepublic voidonSubscribe(Disposable d) {

dialogViewModel.showProgressData.setValue(true);

}

@Overridepublic voidonSuccess(T reply) {

dialogViewModel.showProgressData.setValue(false);

String code=reply.getResCode();if (code.equals("0000")) {

onReply(reply);

}else{

dialogViewModel.showErrorData.setValue(reply);

}

}

@Overridepublic voidonError(Throwable e) {

dialogViewModel.showProgressData.setValue(false);

dialogViewModel.showExceptionData.setValue(e);

}

}

EyeKeyViewModelFactory.java

packagecom.bu_ish.viewmodeltest.view_model;importandroid.arch.lifecycle.ViewModel;importandroid.arch.lifecycle.ViewModelProvider;importandroid.support.annotation.NonNull;public class EyeKeyViewModelFactory implementsViewModelProvider.Factory {privateDialogViewModel dialogViewModel;publicEyeKeyViewModelFactory(DialogViewModel dialogViewModel) {this.dialogViewModel =dialogViewModel;

}

@NonNull

@Overridepublic T create(@NonNull ClassmodelClass) {return (T) newEyeKeyViewModel(dialogViewModel);

}

}

DialogViewModel.java

packagecom.bu_ish.viewmodeltest.view_model;importandroid.arch.lifecycle.MutableLiveData;importandroid.arch.lifecycle.ViewModel;importcom.bu_ish.viewmodeltest.reply.BaseReply;public class DialogViewModel extendsViewModel {public MutableLiveData showProgressData = new MutableLiveData<>();public MutableLiveData showErrorData = new MutableLiveData<>();public MutableLiveData showExceptionData = new MutableLiveData<>();

}

使用ViewModel的好处

即使发生配置变更(Configuration Change),ViewModel中的数据依然存在

所以,使用ViewModel后,也就不需要考虑onSaveInstanceState这类操作了^_^

参考博文

完整Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值