简体   繁体   English

我在 MainAcitvity 连接到 ViewModel 和 Adapter 时遇到了什么问题?

[英]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.

相关问题 我的适配器做错了什么? - what I am doing wrong with my adapter? Android:SaveState、Fragments 和 ViewModel:我做错了什么? - Android:SaveState, Fragments and ViewModel: what am I doing wrong? 我在服务中做错了什么? - What am I doing wrong in my service? 我在这里做错了什么:Android套接字连接? - What I am doing wrong here : Android Socket Connection? Picasso + convertView:我在这里做错了什么? - Picasso + convertView: what am I doing wrong here? 为什么我会收到此例外,我在这里做错了什么 - Why I am getting this exception, what I am doing wrong here setAdapter 需要回收器视图适配器,但我需要 viewpager 适配器。 我究竟做错了什么? - setAdapter expects recycler view adapter but I want viewpager adapter. What am I doing wrong? 我无法在Android XML布局的左侧获得图片以正确显示。 我在这里做错了什么? - I can't get an image on the left side of my Android XML Layout to appear properly. What am I doing wrong here? 我的适配器似乎正在接收数据,但它没有显示在我的 RecyclerView 中。 关于我做错了什么的任何想法? - My Adapter seems to be receiving data, but it's not being displayed in my RecyclerView. Any ideas as to what I am doing wrong? 我的Android GridView有什么问题? - What am I doing wrong with my Android GridView?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM