images抱歉,我是Java/Kotlin移动应用的新手…
下面的代码片段来自RegisterFragment。Kt是主类:-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val username = binding.text
PackageSdk.getInstance().hasDuplicateUserKey(**username**, object : PackageResponseCallback<ResultResponse> {
override fun onSuccess(result: ResultResponse) {
Log.i(TAG, "Result code : " + result.rtCode)
}
override fun onFailed(errorResult: ErrorResult) {
Log.e(TAG, "Error code : " + errorResult.errorCode)
}
})
而下面是名为RegisteredUserView.kt的数据类
data class RegisteredUserView(
val username: String
//... other data fields that may be accessible to the UI
)
我通常使用toString()来获取"username"的参数值但是我会得到这个bug
. lang。NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.Class java.lang.Object.getClass()' .
但如果我只留下用户名,我将有"类型不匹配。必需:字符串找到:EditText"错误类型。我是否必须创建一个函数将值从数据类传递到RegisterFragment类,以便有适当的参数输入。如果是的,那么如何?如果没有,那么如何分配参数输入?顺便说一句,
val username = binding.text
是从layout_fragmentregister(一个EditText)获取,它的id = text
你得到的错误是因为
val username: String为空
你的数据类除了传递数据之外并没有做什么。您应该使用它的实例和视图模型将数据传递给另一个片段。一个典型的域数据类如下所示
data class User(
val userID: String,
val userName: String,
val emailAddress: String,
val photoUrl: String,
val firstName: String,
val lastName: String,
val age: Int,
val score: Int,
val sex: Int,
val emailVerified:Boolean)
创建数据类的实例,创建私有变量来存储该数据。
private var currentUser = User(someFunctionThatReturnsUserData)// the data must match the model
用于测试目的和更好的理解,您可以使用测试用户创建一个函数
fun generateTestUser():User{return User("TEST ID","TEST NAME","TEST EMAIL")}
可以通过访问任何属性来决定如何在currentUser中显示数据。我更喜欢在视图模型中这样做,因为它从UI线程中删除了很多逻辑,并且不会在配置更改时重置。
currentUser.userId
currentUser.userName
currentUser.emailAddress
等等。通常最佳实践是创建私有变量和公共变量。Private用于操作数据,public用于允许视图查看数据,但不能修改数据。
在你的视图模型
private val _uid: MutableLiveData<String> by lazy { MutableLiveData<String>() }
val uid:LiveData<String> //this returns a string of live data for the ui to observe changes on.
get() = _uid //get the value from the private val
fun getUserId(){_uid.value = "some string"}
这些只是示例,可能无法简单地复制/粘贴,但希望能有所帮助。