Я только что создал демонстрационный проект для изучения MVVM и того, как использовать Mvvm в нашем проекте. но я обнаружил ошибку при запуске проекта

ошибка: не удается найти класс символа ViewModel
ошибка: пакет ViewModel не существует
ошибка: пакет ViewModel не существует
ошибка: пакет ViewModel не существует

И вот мой код

public class User extends BaseObservable {

String email,password;
boolean isDataValidate;

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public boolean isDataValidate() {
    return !TextUtils.isEmpty(getEmail())&& Patterns.EMAIL_ADDRESS.matcher(getEmail()).matches()&&
             getPassword().length()>6;
}

public void setDataValidate(boolean dataValidate) {
    isDataValidate = dataValidate;
}

}

И вот мой класс ViewModel

public class LoginViewModel extends ViewModel {

private User user;
private LoginResultCallback loginResultCallback;

public LoginViewModel(LoginResultCallback loginResultCallback){
    this.loginResultCallback=loginResultCallback;
    this.user=new User();

}
public String getEmailText1(){

    return user.getEmail();
}
public String getPasswordText1(){

    return user.getPassword();
}
public TextWatcher getEmailText(){
    return new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            user.setEmail(editable.toString());


        }
    };
}

public TextWatcher getPasswordText(){

    return new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
        user.setPassword(editable.toString());
        }
    };

}


public void onLoginClicked(View view)
{

    if (user.isDataValidate()){
        loginResultCallback.onSuccess("Login was Successfull");
    }
    else{
        loginResultCallback.onError("Login Invalid Credential");
    }

}

}

И вот моя MainActivity

public class MainActivity extends AppCompatActivity implements LoginResultCallback {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActivityMainBinding activityMainBinding= DataBindingUtil.setContentView(this,R.layout.activity_main);
    LoginViewModel loginViewModel=new LoginViewModel(this);
    activityMainBinding.setViewModel(loginViewModel);

    //activityMainBinding.setViewModel(ViewModelProviders.of(this,new LoginViewModelFactory(this)).get(LoginViewModel.class));
}

@Override
public void onSuccess(String Message) {
    Toast.makeText(this, ""+Message, Toast.LENGTH_SHORT).show();
}

@Override
public void onError(String Error) {
    Toast.makeText(this, ""+Error, Toast.LENGTH_SHORT).show();
}

}

А вот класс viewModelFactory

public class LoginViewModelFactory  extends ViewModelProvider.NewInstanceFactory {

private LoginResultCallback loginResultCallback;

public LoginViewModelFactory(LoginResultCallback loginResultCallback)
{
    this.loginResultCallback=loginResultCallback;

}

@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
    return (T) new LoginViewModel(loginResultCallback);
}

}

И XML здесь

<?xml version="1.0" encoding="utf-8"?>
<data>

    <variable
        name="viewModel"
        type="com.example.designinfpattern.ViewModel.LoginViewModel" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">


        <EditText
            android:id="@+id/email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:addTextChangedListener="@{viewModel.emailText}"
            android:hint="Enter Your account Email or Username"
            />

        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter Your account password"
            app:addTextChangedListener="@{viewModel.passwordText}" />

    </LinearLayout>

    <Button
        android:id="@+id/login_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="@{viewModel::onLoginClicked}"
        android:text="Login" />
</LinearLayout>

Вот зависимость, которую я использую для файла сборки Gradle:
реализация 'androidx.lifecycle: расширения жизненного цикла: 2.1.0'

Я не знаю, как исправить эту ошибку, и я занимаюсь исследованиями и разработками, но не нахожу подходящего решения. Пожалуйста, помогите мне решить проблему

Заранее спасибо

0
Mohit Lakhanpal 9 Окт 2019 в 14:49

3 ответа

Добавьте следующее в свой build.gradle

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
// alternatively - just ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:2.1.0"
1
Swayangjit 9 Окт 2019 в 15:22
Я обновил код и добавил зависимость от вопроса, пожалуйста, проверьте это
 – 
Mohit Lakhanpal
9 Окт 2019 в 15:12
Та же проблема
 – 
Mohit Lakhanpal
9 Окт 2019 в 15:24
Не могли бы вы поделиться своими обоими файлами build.gradle?
 – 
Swayangjit
9 Окт 2019 в 15:28

Вам нужно переименовать папку (пакет) ViewModel из ViewModel в viewmodel

1
ali riahi 13 Апр 2020 в 10:21
Это был вопрос? перейдите по этой ссылке: stackoverflow.com/help/how-to-ask, прежде чем задать следующий вопрос. Спасибо
 – 
Saadat
13 Апр 2020 в 10:56

Вы уверены, что правильно импортировали пакеты MVVM?

На уровне проекта gradle:

allprojects {
    repositories {
        google()
        jcenter()
    }
}

Затем добавьте эти зависимости:

implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"

Или более конкретно (последняя версия)

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
0
Corentin Houdayer 9 Окт 2019 в 14:59
Спасибо за ответ, но я уже использовал последнюю версию зависимости
 – 
Mohit Lakhanpal
9 Окт 2019 в 15:11
Вы добавили еще одну зависимость, которая может конфликтовать с ViewModel?
 – 
Corentin Houdayer
9 Окт 2019 в 15:33