【发布时间】:2020-09-19 17:41:16
【问题描述】:
我有以下代码
database.child("users").child(this.invitedBy).runTransaction(object : Transaction.Handler {
override fun doTransaction(mutableData: MutableData): Transaction.Result {
val u = mutableData.getValue(User::class.java)
?: return Transaction.success(mutableData)
if (u.numReferrals == null || u.referralEarning == null) {
// Unstar the post and remove self from stars
u.numReferrals = 1
u.referralEarning = 1;
} else {
// Star the post and add self to stars
u.numReferrals = u.numReferrals!! + 1
u.referralEarning = u.referralEarning!! + 1;
}
// Set value and report transaction success
mutableData.value = u
return Transaction.success(mutableData)
}
override fun onComplete(
databaseError: DatabaseError?,
committed: Boolean,
currentData: DataSnapshot?
) {
// Transaction completed
Log.d("MUser", "postTransaction:onComplete:" + databaseError!!)
}
})
当我运行它时,它给了我以下错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.test, PID: 5375
kotlin.KotlinNullPointerException
at com.test.test.MUser$setReferral$1.onComplete(MUser.kt:229)
at com.google.firebase.database.core.Repo$16$1.run(com.google.firebase:firebase-database@@19.2.1:1006)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7478)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
W/System.err: kotlin.KotlinNullPointerException
W/System.err: at com.test.test.MUser$setReferral$1.onComplete(MUser.kt:229)
at com.google.firebase.database.core.Repo$16$1.run(com.google.firebase:firebase-database@@19.2.1:1006)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7478)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
这是我的 User.kt
import com.google.firebase.database.IgnoreExtraProperties
// [START rtdb_user_class]
@IgnoreExtraProperties
data class User(
var id: String = "",
var name: String = "",
var email: String = "",
var userReads: Int? = 0,
var userPlays: Int? = 0,
var userWatches: Int? = 0,
var paidDate : Int? = 0,
var endPaidDate : Int? = 0,
var paidStatus : String? = "",
var paymentMethod : String? = "",
var planid : String? = "",
var firebaseUid : String? = "",
var referralEarning : Int? = 0,
var numReferrals : Int? = 0
)
我做错了什么?
【问题讨论】:
-
你能调试一下看看到底是哪里崩溃了吗?
-
错误发生在哪一行代码?
invitedBy的确切值是多少?还请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。 -
这是崩溃的行 if (u.numReferrals == null || u.referralEarning == null) { // 取消给帖子加星标并从星标中删除自我 u.numReferrals = 1 u.referralEarning = 1; } else { // 为帖子加注星标并将自己添加到星标 u.numReferrals = u.numReferrals!! + 1 u.referralEarning = u.referralEarning!! + 1; }
-
可能是你为空?
-
@MirianaItani
u不能为空,因为它会进入返回语句:val u = mutableData.getValue(User::class.java) ?: return Transaction.success(mutableData)
标签: android firebase kotlin firebase-realtime-database