[英]What am I doing wrong here for that I am encountering in my MainAcitvity while connecting it to ViewModel and Adapter?
I am trying to show list of elements in Recyclerview from Adapter class while connecting it function in ViewModel class.我正在尝试从 Adapter 类中显示 Recyclerview 中的元素列表,同时在 ViewModel 类中连接它的功能。 i am using mvvm architecture, when I execute the program, I am getting 'java.lang.RuntimeException: Cannot create an instance of class com.example.mvvmnetwork.viewmodel.Mainviewmodel' error in my Logcat, I am providing the Logcat below.我正在使用 mvvm 体系结构,当我执行程序时,我在我的 Logcat 中收到“java.lang.RuntimeException: Cannot create an instance of class com.example.mvvmnetwork.viewmodel.Mainviewmodel”错误,我在下面提供 Logcat。
MainActivity.kt MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.ProgressBar
import androidx.activity.viewModels
import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.mvvmnetwork.adapter.MainAdapter
import com.example.mvvmnetwork.viewmodel.Mainviewmodel
class MainActivity : AppCompatActivity() {
private val mainViewmodel:Mainviewmodel by viewModels()
lateinit var mainAdapter: MainAdapter
lateinit var recyclerView: RecyclerView
lateinit var progressBar:ProgressBar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
progressBar = findViewById<ProgressBar>(R.id.progressBar)
setupAdapter()
setupObserver()
}
private fun setupObserver() {
mainViewmodel.response.observe(this){ results ->
results.data?.let { users->
progressBar.isVisible = users.isEmpty()
recyclerView.isVisible = users.isNotEmpty()
mainAdapter.addData(users)
}
}
mainViewmodel.getUsers()
}
private fun setupAdapter() {
recyclerView.layoutManager = LinearLayoutManager(this)
mainAdapter = MainAdapter(arrayListOf())
recyclerView.addItemDecoration(
DividerItemDecoration(
recyclerView.context,
(recyclerView.layoutManager as LinearLayoutManager).orientation
)
)
recyclerView.adapter = mainAdapter
}
}
MainAdapter.kt[Adapter class] MainAdapter.kt[适配器类]
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.appcompat.widget.AppCompatTextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.mvvmnetwork.R
import com.example.mvvmnetwork.data.api.User
class MainAdapter(private val users:
ArrayList<User>):RecyclerView.Adapter<MainAdapter.DataViewHolder>() {
inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(user: User) {
val imageView:ImageView = itemView.findViewById(R.id.imageViewAvatar)
val textViewUserName:AppCompatTextView = itemView.findViewById(R.id.textViewUserName)
val textViewUserEmail:AppCompatTextView = itemView.findViewById(R.id.textViewUserEmail)
Glide.with(imageView.context)
.load(user.avatar)
.into(imageView)
textViewUserName.text = user.name
textViewUserEmail.text=user.email
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)=
DataViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_layout, parent,
false
)
)
override fun onBindViewHolder(holder: DataViewHolder, position: Int)= holder.bind(users[position])
override fun getItemCount(): Int =users.size
fun addData(list: List<User>){
users.addAll(list)
}
}
MainviewModel.kt [Viewmodel class] MainviewModel.kt [视图模型类]
import androidx.lifecycle.*
import com.example.mvvmnetwork.data.api.User
import com.example.mvvmnetwork.repository.UserRepository
import com.example.mvvmnetwork.sealed.Network
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class Mainviewmodel @Inject internal constructor(private val userRepository: UserRepository,
):ViewModel() {
private val _response:MutableLiveData<Network<List<User>>> = MutableLiveData()
val response:LiveData<Network<List<User>>> = _response
fun getUsers() = viewModelScope.launch {
userRepository.getUsers().collect {
_response.value = it
}
}
}
Logcat日志猫
你错过了在你的活动中注释
@AndroidEntryPoint
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.