当我启动应用程序时,它工作正常,但当我单击“更改配置文件”时,会出现以下错误:
android.app.RuntimeException:无法启动活动ComponentInfo{hread.main}:hread.java:6119RuntimeException:无法在ethod.invoke创建类java.lang.reflect.EditProfileViewModel的实例ActivityTcom.android.internal.os.LaunchActive(ActivityTaller.run)nit.java:886ActivityTcom.android.internal.os.LaunchActive(ActivityTnit.main)nit.java:776ActivityThread.-wrap12(ActivityTjava.lang.)com.example.homeactivity.activities.editprofile.ActivityThread$H. handleMessage(ActivityThread.java:1477)android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:154)java.lang.ActivityTcom.example.homeactivity/com.example.homeactivity.activities.editprofile.EditProfileActivity(ActivityTjava.lang.)com.example.homeactivity.activities.editprofile.Mandroid.app.(Native Method)hread.performZygoteInit$Method odAndArgsChread.java:2665(ZygoteIandroid.app.)hread.handleZygoteIhread.java:2726(ZygoteIandroid.app.)引起的:hread.javaRuntimeException:无法创建类android.app.EditProfileViewModel的实例EditProfileActivity. onCreate(EditProfileActivity. kt: 45)at android. app. html" target="_blank">active. performCreate(Activity. java: 6679)at android. app. Instrumentation. call ActivityOnCreate(Instrumentation. java: 1118)at android. app. ActivityThread. performLaunchActive(ActivityThread. java: 2618)at android. app. ActivityThread. handleLaunchActive(ActivityThread. java: 2726)
我现在7天都无法摆脱这个错误...:/我知道我发布了太多代码,但我真的不知道如何解决它...
这是我的EditProfileActivity。tk公司
class EditProfileActivity : AppCompatActivity(), PasswordDialog.Listener {
private lateinit var mViewModel: EditProfileViewModel
private val TAG = "EditProfileActivity"
private lateinit var mUser: User
private lateinit var mPendingUser: User
private lateinit var mFirebase: FirebaseHelper
private lateinit var mCamera: CameraHelper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_profile)
Log.d(TAG, "onCreate")
mCamera = CameraHelper(this)
close_image.setOnClickListener { finish() }
save_image.setOnClickListener { updateProfile() }
change_photo_text.setOnClickListener { mCamera.takeCameraPicture() }
mFirebase = FirebaseHelper(this)
mViewModel = ViewModelProviders.of(this).get(EditProfileViewModel::class.java)
mViewModel.user.observe(this, Observer{it?.let{
mUser = it
name_input.setText(mUser.name)
username_input.setText(mUser.username)
website_input.setText(mUser.website)
bio_input.setText(mUser.bio)
email_input.setText(mUser.email)
phone_input.setText(mUser.phone)
profile_image.loadUserPhoto((mUser.photo))
}})
}
@SuppressLint("MissingSuperCall")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == mCamera.REQUEST_CODE && resultCode == RESULT_OK) {
mViewModel.uploadAndSetUserPhoto(mCamera.imageUri!!).addOnFailureListener {
showToast(it.message)
}
}
}
private fun updateProfile() {
mPendingUser = readInputs()
val error = validate(mPendingUser)
if (error == null) {
if (mPendingUser.email == mUser.email) {
updateUser(mPendingUser)
} else {
PasswordDialog().show(supportFragmentManager, "password_dialog")
}
} else {
showToast(error)
}
}
private fun readInputs(): User {
return User(
name = name_input.text.toString(),
username = username_input.text.toString(),
email = email_input.text.toString(),
website = website_input.text.toStringOrNull(),
bio = bio_input.text.toStringOrNull(),
phone = phone_input.text.toStringOrNull()
)
}
override fun onPasswordConfirm(password: String) {
if (password.isNotEmpty()) {
val credential = EmailAuthProvider.getCredential(mUser.email, password)
mFirebase.reauthenticate(credential) {
mFirebase.updateEmail(mPendingUser.email) {
updateUser(mPendingUser)
}
}
} else {
showToast(getString(R.string.enter_your_password))
}
}
private fun updateUser(user: User) {
val updatesMap = mutableMapOf<String, Any?>()
if (user.name != mUser.name) updatesMap["name"] = user.name
if (user.username != mUser.username) updatesMap["username"] = user.username
if (user.website != mUser.website) updatesMap["website"] = user.website
if (user.bio != mUser.bio) updatesMap["bio"] = user.bio
if (user.email != mUser.email) updatesMap["email"] = user.email
if (user.phone != mUser.phone) updatesMap["phone"] = user.phone
mFirebase.updateUser(updatesMap) {
showToast(getString(R.string.profile_saved))
finish()
}
}
private fun validate(user: User): String? =
when {
user.name.isEmpty() -> getString(R.string.please_enter_name)
user.username.isEmpty() -> getString(R.string.please_enter_username)
user.email.isEmpty() -> getString(R.string.please_enter_email)
else -> null
}
}
我的EditProfileViewModel。千吨级
class EditProfileViewModel(private val repository: EditProfileRepository) : ViewModel() {
val user: LiveData<User> = repository.getUser()
fun uploadAndSetUserPhoto(localImage: Uri): Task<Unit> =
repository.uploadUserPhoto(localImage).onSuccessTask{ downloadUrl ->
repository.updateUserPhoto(downloadUrl!!)
}
}
这是我的EditProfileRepository。千吨级
interface EditProfileRepository {
fun getUser(): LiveData<User>
fun uploadUserPhoto(localImage: Uri): Task<Uri>
fun updateUserPhoto(downloadUrl: Uri): Task<Unit>
}
class FirebaseEditProfileRepository : EditProfileRepository {
override fun uploadUserPhoto(localImage: Uri): Task<Uri> =
storage.child("users/${currentUid()!!}/photo").putFile(localImage).onSuccessTask {
storage.child("users/${currentUid()!!}/photo").downloadUrl}.onSuccessTask {
Tasks.forResult(it!!)
}
override fun updateUserPhoto(downloadUrl: Uri): Task<Unit> =
database.child("users/${currentUid()!!}/photo").setValue(downloadUrl).toUnit()
override fun getUser(): LiveData<User> =
database.child("users").child(currentUid()!!).liveData().map {
it.asUser()!!
}
}
最后,这里是我的ViewModelFactory。千吨级
@Suppress("UNCHECKED_CAST")
class ViewModelFactory: ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(AddFriendsViewModel::class.java)){
return AddFriendsViewModel(FirebaseAddFriendsRepository()) as T
} else if (modelClass.isAssignableFrom(EditProfileViewModel::class.java)){
return EditProfileViewModel(FirebaseEditProfileRepository()) as T
}else {
error("Unknown view model class $modelClass")
}
}
}
EditProfileViewModel没有空构造函数。因此,为了创建它的实例,您需要通过一个视图模型工厂(ViewModelFactory)。
您编写了工厂,只需调用它。
而不是
mViewModel = ViewModelProviders.of(this).get(EditProfileViewModel::class.java)
写
mViewModel = ViewModelProviders.of(this,
ViewModelFactory())
.get(EditProfileViewModel::class.java)
问题内容: 请问一个简单的问题,我完全是Java和android开发人员的初学者。调用surfaceChanged时,如何在setCameraDisplayOrientation中获取Activity的实例? 问题答案: 这是一种使用静态变量避免内存泄漏的方法:静态引用将在onCreate(Bundle)方法中设置的Activity实例。 在您的中学班级中写下如下内容: 然后在Activity类的
很好的一天!我正在努力解决这个问题一周,这是以前没有的(也就是说,这个程序以前是有效的)。 问题:我的登录表单的GUI将不再加载。 给定:(LoginScreen类视图) 我的login_screenxml代码: 最后,我的AndroidID清单。xml 这是我的Logcat输出: 注意:每当我在“扩展活动”之后删除代码“implements JPacketListener”,并删除它的方法(on
问题内容: 我的应用程序有3个活动。 活动A是从另一个活动通过调用的。活动B和C也被类似地称为。我还必须从通知栏调用活动A(如果有一些特定的通知)。 现在,如果当前我处于活动B或C中,并且我单击通知栏,然后调用活动A,则该应用程序仅进入活动A,并且通过活动B或C输入的数据不会持续存在。 我不要这种行为。我希望如果单击通知,它应该仅重定向到当前屏幕。可以帮个忙。(我提到的是)。 问题答案: 您可能可
问题内容: 在将运行良好的应用程序转换为库(包括其Activity类!)之后,我试图通过简单地超类库的活动来创建使用整个库的应用程序: Eclipse构建了这个新的“重新架构化”的应用程序,没有任何错误,但是当我尝试运行它时,出现了一个异常: 我不知道为什么会这样,因为当类恰好是构建的派生类(没有错误!)并且现在尝试运行时,由于“未找到类”的错误。 我该如何解决? 我想念什么? 编辑 (通过@Ca
我的应用程序运行得很好,我可以从一个活动转到另一个活动,然后我添加了一些Toast消息用于注册按钮,然后我在尝试从MainActivity转到RegistrationActivity时遇到了这个错误。。 美娜ctivity.kt 注册ctivity.kt activity_main.xml 活动注册。xml 显示 和logchat 2019-12-09 09:08:16.171 28691-286
我已经将我的Hive配置为链接:http://www.youtube.com/watch?v=Dqo1ahdBK_A,但我在Hive中创建表时收到以下错误。我使用的是hadoop-1.2.1和hive-0.12.0。