Несоответствие типов проблем с привязкой данных Kotlin - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь реализовать привязку данных в моем небольшом проекте kotlin на Android.Но получаю ошибку при назначении viewmodel привязке данных.

У меня есть три класса в этом небольшом проекте 1. Пользователь - класс модели данных 2. ActivityMainViewModel - класс модели представления 3. MainActivity - класс, который будет реализовывать привязку данных

Но в MainActivity.kt Я получаю сообщение об ошибке при установке viewmodel для привязки.

User.kt

class User() {
    var emailId: String= ""
    var password: String= ""

    constructor(emailId: String, password: String) : this() {
        this.emailId = emailId
        this.password = password
    }
}

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        var myviewmodel= MainActivityViewModel()
        val userObj = User("abc@gmail.com","123344")
        myviewmodel.setUser(userObj)

        binding.viewModel = myviewmodel
    }
}

MainActivityViewModel.kt

class MainActivityViewModel() : ViewModel() {
    val userObj = User()

    fun setUser(user: User){
        userObj.emailId = user.emailId
        userObj.password = user.password
    }
}

activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
        <data>
               <variable
                        name="viewModel"
                        type="testing.justrade.databindingissue.ViewModel.MainActivityViewModel"
                />
        </data>
        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".View.MainActivity">
                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Hello World!"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintTop_toTopOf="parent"/>
        </LinearLayout>
</layout>

Я получаю эту ошибку.

E:\--------------------------/ MainActivity.kt: (21, 17): Cannot access class 'ViewModel.MainActivityViewModel'. Check your module classpath for missing or conflicting dependencies

Type mismatch: inferred type is testing.justrade.databindingissue.ViewModel.MainActivityViewModel but ViewModel.MainActivityViewModel? was expected

Я приложил снимок экрана с ошибкой в ​​ссылке удара -

https://ibb.co/Y25dbTn

1 Ответ

0 голосов
/ 18 мая 2019

Вы не должны называть свои пакеты с CamelCase , как определено в Соглашениях об именах Java .

Имена пакетов записываютсяво всех строчных буквах, чтобы избежать конфликта с именами классов или интерфейсов.

Особенно при использовании Библиотеки привязки данных Android это актуально.В вашем случае ViewModel интерпретируется как класс и, следовательно, ViewModel.MainActivityViewModel как его статический внутренний класс.

Вы должны переименовать свой пакет в viewmodel, чтобы он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...