简体   繁体   English

如何修复视图模型的此错误? (在模拟器上运行程序时发生)

[英]How can I fix this error for view Model? (Occurs when running the program on the emulator)

Error running program on emulator:在模拟器上运行程序时出错:

2022-06-16 15:38:04.724 12519-12555/com.example.mvvm E/AwareLog: AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@5abc123 2022-06-16 15:38:04.725 12519-12555/com.example.mvvm E/AwareLog: AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@30c1620 2022-06-16 15:38:05.103 12519-12519/com.example.mvvm E/AndroidRuntime: 2022-06-16 15:38:04.724 12519-12555/com.example.mvvm E/AwareLog:AtomicFileUtils:readFileLines 文件不存在:android.util.AtomicFile@5abc123 2022-06-16 15:38:04.725 12519-12555 /com.example.mvvm E/AwareLog:AtomicFileUtils:readFileLines 文件不存在:android.util.AtomicFile@30c1620 2022-06-16 15:38:05.103 12519-12519/com.example.mvvm E/AndroidRuntime:

FATAL EXCEPTION: main
Process: com.example.mvvm, PID: 12519
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mvvm/com.example.mvvm.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.mvvm.UserViewModel
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:213)
    at android.app.ActivityThread.main(ActivityThread.java:8178)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
 Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.mvvm.UserViewModel
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:201)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:319)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:301)
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:175)
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:138)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:184)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
    at com.example.mvvm.MainActivity.onCreate(MainActivity.kt:15)
    at android.app.Activity.performCreate(Activity.java:8086)
    at android.app.Activity.performCreate(Activity.java:8074)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:213) 
    at android.app.ActivityThread.main(ActivityThread.java:8178) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101) 
 Caused by: java.lang.InstantiationException: java.lang.Class<com.example.mvvm.UserViewModel> has no zero argument constructor
    at java.lang.Class.newInstance(Native Method)
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:199)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:319) 
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:301) 
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:175) 
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:138) 
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:184) 
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153) 
    at com.example.mvvm.MainActivity.onCreate(MainActivity.kt:15) 
    at android.app.Activity.performCreate(Activity.java:8086) 
    at android.app.Activity.performCreate(Activity.java:8074) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:213) 
    at android.app.ActivityThread.main(ActivityThread.java:8178) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101) 
    2022-06-16 15:41:00.974 12826-12826/? E/om.example.mvv: Unknown bits 
  set in runtime_flags: 0x8000
   2022-06-16 15:41:00.998 12826-12826/? E/libc: Access denied finding 
  property "runtime.mmitest.isrunning"
  2022-06-16 15:41:01.342 12826-12897/com.example.mvvm E/AwareLog: 
  AtomicFileUtils: readFileLines file not exist: 
 android.util.AtomicFile@5abc123
2022-06-16 15:41:01.343 12826-12897/com.example.mvvm E/AwareLog: 
   AtomicFileUtils: readFileLines file not exist: 
  android.util.AtomicFile@30c1620
   2022-06-16 15:41:01.768 12826-12826/com.example.mvvm 
    E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mvvm, PID: 12826
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mvvm/com.example.mvvm.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.mvvm.UserViewModel
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:213)
    at android.app.ActivityThread.main(ActivityThread.java:8178)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
 Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.mvvm.UserViewModel
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:201)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:319)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:301)
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:175)
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:138)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:184)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
    at com.example.mvvm.MainActivity.onCreate(MainActivity.kt:15)
    at android.app.Activity.performCreate(Activity.java:8086)
    at android.app.Activity.performCreate(Activity.java:8074)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:213) 
    at android.app.ActivityThread.main(ActivityThread.java:8178) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101) 
 Caused by: java.lang.InstantiationException: java.lang.Class<com.example.mvvm.UserViewModel> has no zero argument constructor
    at java.lang.Class.newInstance(Native Method)
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:199)

MainActivity:主要活动:

   import androidx.appcompat.app.AppCompatActivity
   import android.os.Bundle
   import androidx.databinding.DataBindingUtil
   import androidx.lifecycle.ViewModelProvider
   import com.example.mvvm.databinding.ActivityMainBinding

   class MainActivity : AppCompatActivity() {

     lateinit var binding : ActivityMainBinding
     lateinit var userviewModel: UserViewModel

     override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       binding = DataBindingUtil.setContentView(this ,R.layout.activity_main)
       userviewModel= ViewModelProvider(this).get(UserViewModel :: class.java)

    val dao = UserDatabase.getInstance(application).userDao
    val repository = UserRepository(dao)
    val factory = UserViewModelFactory(repository)

    userviewModel = ViewModelProvider(this ,factory).get(UserViewModel::class.java)
    binding.myViewModel=userviewModel
    binding.lifecycleOwner=this
}

} }

userViewModel:用户视图模型:

  import androidx.databinding.Bindable
  import androidx.databinding.Observable
  import androidx.lifecycle.MutableLiveData
  import androidx.lifecycle.ViewModel
  import androidx.lifecycle.viewModelScope
  import kotlinx.coroutines.launch

  class UserViewModel(val repository : UserRepository): ViewModel(), Observable {
  val users = repository.users

  @Bindable
  var inputName = MutableLiveData<String>()!!
  @Bindable
  var inputEmail = MutableLiveData<String>()!!

  @Bindable
  var saveupdateButtonText = MutableLiveData<String>()

  @Bindable
  var deleteAlldeleteButtonText = MutableLiveData<String>()

  init {
    saveupdateButtonText.value = "دخیره"
    deleteAlldeleteButtonText.value = "حذف"
   }

  fun saveOrUpdate() {
     val name: String = inputName.value!!
     val email: String = inputEmail.value!!
     insert(User(0, name, email))
     inputName.value = null
     inputEmail.value = null

}

fun deleteAllOrDelete() {
    deleteAll()
}

fun insert(user: User) {
    viewModelScope.launch {
        repository.insert(user)

    }
}
fun deleteAll() {
    viewModelScope.launch {
        repository.deleteAll()
    }
}

override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {

}

override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {

}

} }

UserViewModelFactory:用户视图模型工厂:

   import androidx.lifecycle.ViewModel
   import androidx.lifecycle.ViewModelProvider

   class UserViewModelFactory(val repository: UserRepository) : ViewModelProvider.Factory {
     override fun <T : ViewModel> create(modelClass: Class<T>): T {
         if (modelClass.isAssignableFrom(UserViewModel::class.java)){
         return UserViewModel(repository) as  T
           }
       throw IllegalAccessException("Unknown ViewModel Class")
 }

} }

UserRepository:用户存储库:

   class UserRepository(val dao:UserDao) {
     val users = dao.getAllUsers()

      suspend fun insert (user:User){
         dao.insertUser(user)
   }

      suspend fun update (user:User){
        dao.updateUser(user)
   }

      suspend fun delete (user:User){
        dao.deleteUser(user)
  }


     suspend fun deleteAll (){
       dao.deleteAll()
  }

} }

User:用户:

   import androidx.room.ColumnInfo
   import androidx.room.Entity
   import androidx.room.PrimaryKey


   @Entity(tableName ="user_table") 
   data class User (
     @PrimaryKey(autoGenerate = true) 
     @ColumnInfo(name ="user_id") 
     val id :Int ,
     @ColumnInfo(name="user_name")
     val name :String,
     @ColumnInfo(name="user_email")
     val email : String
)

User dao:用户道:

   import androidx.lifecycle.LiveData
   import androidx.room.*

   @Dao
   interface UserDao {

    @Insert
     public fun insertUser (user:User)

     @Update
     public fun updateUser (user:User)

     @Delete
     public fun  deleteUser (user:User)

     @Query("DELETE FROM user_table")
     public fun deleteAll()

     @Query("SELECT * FROM user_table")
     fun getAllUsers(): LiveData<List<User>>


 }

To have an instance of your view model you have to do it like this:要拥有视图模型的实例,您必须这样做:

class MainActivity : AppCompatActivity() {

     lateinit var binding : ActivityMainBinding

     private val userviewModel by viewModels<UserviewModel >()

...
}

And I recommend you to use AndroidViewModel我建议你使用 AndroidViewModel

class UserViewModel(application: Application): AndroidViewModel(application){
    private val mDataRepository by lazy { UserRepository(application) }
..
}

You can also have a look to the android developer website你也可以看看android开发者网站

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 运行 Android 模拟器时如何修复 GPU Driver Issue 错误 - How to fix GPU Driver Issue error when running the Android emulator 在 Android 模拟器上运行 React 应用程序时如何修复 CORS 错误? - How to fix CORS error when running the React app on Android emulator? 如何修复使用evosuite生成测试用例时发生的NoClassDefFoundError错误? - How can I fix the NoClassDefFoundError error that occurs when using evosuite to generate test cases? Android 资源编译失败我构建时没有错误但在运行程序时出现错误 - Android resource compilation failed there is no error when i build but while running the program error occurs 运行Android模拟器时如何禁用库加载? - How can I disable loading of libraries when running the Android Emulator? 如何检测 Android 应用程序何时在模拟器中运行? - How can I detect when an Android application is running in the emulator? 每当我尝试在 Android Studio 3.6 上运行应用程序时。 它带来了这个错误......我该如何解决这个问题,以便我的应用程序可以在模拟器中运行 - whenever i try running an app on Android studio 3.6. it brings this error... how can i fix this so that my apps can run in an emulator 在模拟器上运行程序时,在Android中复制数据库时出错 - Error copying database in Android, when running program on emulator 在Android中发生异常时,如何让程序自动打印堆栈跟踪 - How can I make program print a stack trace automatically when an Exception occurs in Android Android - 如何查看在我的应用程序中创建的SQL数据库?我在Eclipse的Android模拟器上运行它 - Android - How can I view a sql database created in my app? I'm running it on the Android emulator in Eclipse
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM