Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从UserRepository获取错误_Android_Multithreading_Repository_Retrofit_Viewmodel - Fatal编程技术网

Android 如何从UserRepository获取错误

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

这是我第一次使用mvvm模式、观察者和改进。我现在有个问题

在我的代码中,MainFragment从MainViewModel调用login并观察mUser。MainViewModel使用登录方法从UserRepository获取用户,但我不能获取错误。我如何知道登录方法已完成,它是否已成功完成或出现错误

我的第二个问题是,如果需要,如何在MainViewModel中更改或使用mUser

以下是MainViewModel:

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(){
返回错误;
}
}
编辑

我解决了我的问题,但我想专业地开发这个程序。所以我愿意接受任何建议