【发布时间】:2023-01-16 23:47:58
【问题描述】:
我正在尝试读取最近更新的字符串字段。我的函数应该返回字符串,返回一个空字符串。
这是我的代码:
返回更新后的字符串的函数:
fun readUsersOfficeHoursList(email: String, callback: (String) -> Unit) {
val database = FirebaseFirestore.getInstance()
val ref = database.collection("Users").document(email)
ref.get()
.addOnSuccessListener { document ->
if (document != null) {
val officeHoursList = document.get("office_hours_list") as String
callback(officeHoursList)
Log.d(TAG, "office_hours_list successfully read")
} else {
Log.d(TAG, "Is empty")
callback("")
}
}
.addOnFailureListener { exception ->
if (exception is FirebaseFirestoreException) {
Log.e(TAG, "Error getting document: ", exception)
}
callback("")
}
}
更新字段的函数:
fun updateUserOfficeHoursList(email: String, code: String){
val database = FirebaseFirestore.getInstance()
val ref = database.collection("Users").document(email)
var list = ""
ref.get()
.addOnSuccessListener { document ->
if (document != null) {
list = document.get("office_hours_list") as String? ?: ""
Log.d(TAG, "office_hours_list successfully read")
if(!list.contains(code)){
if (list.isEmpty()){
list = code
}
else{
list = "$list, $code"
}
ref.update("office_hours_list", list)
.addOnSuccessListener { Log.d(TAG, "List successfully updated") }
.addOnFailureListener { e -> Log.w(TAG, "Error updating list", e) }
}else{
Log.d(TAG, "code already in the list")
}
} else {
Log.d(TAG, "Is empty")
}
}
.addOnFailureListener { exception ->
if (exception is FirebaseFirestoreException) {
Log.e(TAG, "Error getting document: ", exception)
}
}
}
我的测试代码:
myClass.updateUserOfficeHoursList("tfh@gmail.com", "1VVNFxSGbYaauk3iLV80,
1a79bhnaJsY5OhHwaYhH")
myClass.readUsersOfficeHoursList("tfh@gmail.com") {fieldValue1 ->
textView.text = fieldValue1
Log.d(TAG, "fieldValue1: $fieldValue1")
}
我得到的错误:
**2023-01-16 13:43:50.523 8529-8529/com.example.myapplication E/AndroidRuntime:致命异常:主要 进程:com.example.myapplication,PID:8529 java.lang.NullPointerException: null 无法转换为非空类型 kotlin.String 在 com.example.myapplication.RepositoryMockup$readUsersOfficeHoursList$1.invoke(RespositoryMockup.kt:239) 在 com.example.myapplication.RepositoryMockup$readUsersOfficeHoursList$1.invoke(RespositoryMockup.kt:237) 在 com.example.myapplication.RepositoryMockup.readUsersOfficeHoursList$lambda$15(RespositoryMockup.kt:237) 在 com.example.myapplication.RepositoryMockup.$r8$lambda$Rz1CeV4qQ243JiYTVZ8j2Ijj1y0(未知来源:0) 在 com.example.myapplication.RepositoryMockup$$ExternalSyntheticLambda16.onSuccess(未知来源:2) 在 com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.1:1) 在 android.os.Handler.handleCallback(Handler.java:942) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loopOnce(Looper.java:201) 在 android.os.Looper.loop(Looper.java:288) 在 android.app.ActivityThread.main(ActivityThread.java:7898) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) **
【问题讨论】:
-
请编辑您的问题并将您的数据库结构添加为屏幕截图。您的参考资料中
email的价值是多少? -
@AlexMamo 添加
-
错误发生在哪一行代码?
标签: android firebase kotlin google-cloud-firestore