Android 如何从UserRepository获取错误
这是我第一次使用mvvm模式、观察者和改进。我现在有个问题 在我的代码中,MainFragment从MainViewModel调用login并观察mUser。MainViewModel使用登录方法从UserRepository获取用户,但我不能获取错误。我如何知道登录方法已完成,它是否已成功完成或出现错误 我的第二个问题是,如果需要,如何在MainViewModel中更改或使用mUser 以下是MainViewModel:Android 如何从UserRepository获取错误,android,multithreading,repository,retrofit,viewmodel,Android,Multithreading,Repository,Retrofit,Viewmodel,这是我第一次使用mvvm模式、观察者和改进。我现在有个问题 在我的代码中,MainFragment从MainViewModel调用login并观察mUser。MainViewModel使用登录方法从UserRepository获取用户,但我不能获取错误。我如何知道登录方法已完成,它是否已成功完成或出现错误 我的第二个问题是,如果需要,如何在MainViewModel中更改或使用mUser 以下是MainViewModel: public class MainViewModel extends V
public class MainViewModel extends ViewModel {
private UserRepository mUserRepository = UserRepository.getInstance();
private CompositeDisposable mDisposable=new CompositeDisposable();
public MutableLiveData<User> mUser;
public boolean mIsSuccess;
public void login(String email, String password){
mUserRepository.disposable = mDisposable;
mUser = mUserRepository.loginUser(email, password);
mIsSuccess = mUserRepository.getmIsSuccess().getValue();
//I want to make some changes in mUser here.
}
public MutableLiveData<User> getUser(){
return mUser;
}
@Override
protected void onCleared() {
super.onCleared();
mDisposable.clear();
}
}
public类MainViewModel扩展了ViewModel{
private UserRepository mUserRepository=UserRepository.getInstance();
private CompositeDisposable mDisposable=新CompositeDisposable();
公共可变生活数据博物馆;
公共布尔错误;
公共无效登录(字符串电子邮件、字符串密码){
mUserRepository.disposable=mDisposable;
mUser=mUserRepository.logiuser(电子邮件、密码);
mIsSuccess=mUserRepository.getmIsSuccess().getValue();
//我想在这里对mUser进行一些更改。
}
public MutableLiveData getUser(){
回归缪斯;
}
@凌驾
已清除的受保护的void(){
super.onCleared();
mDisposable.clear();
}
}
和用户存储库:
public class UserRepository {
private static UserRepository mInstance;
public CompositeDisposable disposable;
public MutableLiveData<User> mUser = new MutableLiveData<>();
public MutableLiveData<Boolean> mIsSuccess = new MutableLiveData<>();
public static UserRepository getInstance(){
if(mInstance == null)
mInstance = new UserRepository();
return mInstance;
}
public MutableLiveData<User> loginUser(final String email, String password) {
disposable.add(
UserRequest.loginUser(email, password)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<User>() {
@Override
public void onSuccess(User user) {
mUser.setValue(user);
mIsSuccess.setValue(true);
}
@Override
public void onError(Throwable e) {
mIsSuccess.setValue(false);
e.printStackTrace();
}
})
);
return mUser;
}
public MutableLiveData<Boolean> getmIsSuccess() {
return mIsSuccess;
}
}
公共类用户存储库{
私有静态用户实例;
公共合成可降解一次性;
public MutableLiveData mUser=新的MutableLiveData();
public MutableLiveData mIsSuccess=新的MutableLiveData();
公共静态UserRepository getInstance(){
if(minInstance==null)
minInstance=newuserrepository();
回报率;
}
public MutableLiveData登录用户(最终字符串电子邮件,字符串密码){
一次性。添加(
UserRequest.loginUser(电子邮件、密码)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribowith(新的可处置SingleObserver(){
@凌驾
成功时公共无效(用户){
mUser.setValue(用户);
错误成功。设置值(true);
}
@凌驾
公共无效申报人(可丢弃的e){
错误的成功设置值(false);
e、 printStackTrace();
}
})
);
回归缪斯;
}
public MutableLiveData getmIsSuccess(){
返回错误;
}
}
编辑
我解决了我的问题,但我想专业地开发这个程序。所以我愿意接受任何建议