我收到的错误在我的设备屏幕上显示为NullPointerException(它没有出现在日志中)。
基本上,我在.runTransaction()
内调用.addListenerForSingelValueEvent()
方法:
mPollsref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot d : dataSnapshot.getChildren()){
mPollsref.child(d.getKey()).child(VOTE_COUNT).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
mutableData.setValue((long) mutableData.getValue() + 1);
return Transaction.success(mutableData);
}
我收到以下错误。是因为我在听众中呼叫.runTransaction()
吗?我找不到实际的null
以及如何解决:
答案 0 :(得分:2)
您的事务处理程序必须能够处理在MutableData中使用null值进行调用,因此您需要检查并相应地做出响应。
请参阅documentation。特别是,说明:
注意:因为多次调用doTransaction(),所以必须这样做 能够处理空数据。即使您的现有数据存在 远程数据库,它可能不会在事务时本地缓存 函数运行,导致初始值为null。
更具体地说,在您的情况下,您尝试将mutableData.getValue()
返回的null转换为long
。 Java编译器在内部将其重写为在对象上调用longValue(),首先转换为Long
,这就是导致您看到错误消息的原因。