首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LiveData观察失败

LiveData观察失败
EN

Stack Overflow用户
提问于 2019-03-05 05:27:58
回答 1查看 75关注 0票数 0

我正在尝试用MVVM启动应用程序(我是新手),但我遇到了一些问题。

我需要获取livedata值,创建用户对象,然后在postRequest中发送该对象。

这是我的loginViewModel:

public class LoginViewModel extends AndroidViewModel {

private UserRepository userRepository;

private MutableLiveData<String> user;
private MutableLiveData<String> password;
private MutableLiveData<String> email;

private MutableLiveData<Resource<User>> userObservable;

@Inject
public LoginViewModel(@NonNull Application application){
    super(application);

    this.userRepository = new UserRepository();
}

public MutableLiveData<String> getUser() {
    if(user == null)
        user = new MutableLiveData<>();
    return user;
}

public MutableLiveData<String> getPassword() {
    if(password == null)
        password = new MutableLiveData<>();
    return password;
}

public MutableLiveData<String> getEmail() {
    if(email == null)
        email = new MutableLiveData<>();
    return email;
}

public void loginOnClickListener(){

    User user = new User(getUser().getValue(), getPassword().getValue(), getEmail().getValue());

    userRepository.saveUser(user, userObservable);
}
}

在我的代码片段中,每个引用值都处于观察模式:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    loginViewModel = ViewModelProviders.of(getActivity(), viewModelFactory).get(LoginViewModel.class);
    binding.setLoginViewModel(loginViewModel);

    observeViewModel();
}

private void observeViewModel(){

    loginViewModel.getUser().observe(this, user -> {

        String coco = user;

    });

    loginViewModel.getPassword().observe(this, user -> {

        String coco = user;

    });

    loginViewModel.getEmail().observe(this, user -> {

        String coco = user;

    });
}

我在xml文件中有引用:

        <android.support.design.widget.TextInputLayout
        android:id="@+id/userLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="96dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/txtUserValue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/user"
            android:text="@{loginViewModel.user}"
            android:inputType="text"/>
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
    android:id="@+id/passwordLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:layout_marginTop="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/userLayout">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/txtPasswordValue"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/password"
        android:text="@{loginViewModel.password}"
        android:inputType="textPassword"/>
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/emailLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/passwordLayout">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/txtEmailValue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email"
            android:text="@{loginViewModel.email}"
            android:inputType="textWebEmailAddress"/>
    </android.support.design.widget.TextInputLayout>

为什么我的观察者被称为nerver?有什么帮助吗?谢谢!!o/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 05:32:04

我找到了。这就是为什么:

替换为:

android:text="@{loginViewModel.email}"

有了这个:

android:text="@={loginViewModel.email}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54991820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档