【发布时间】:2018-10-12 08:18:53
【问题描述】:
我之前问过几乎相同的问题。但答案不是那么好或不够好。我想重新开始,现在我有很多问题。
这是帖子。
所以现在我有另一个想法。
这次只有一个值计票,但应用程序并没有得到值“count”的实际数量。
这是我的代码:
database = FirebaseDatabase.getInstance();
names= database.getReference("Test");
final Name name = new Name(txtName.getText().toString(), score);
names.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
if (dataSnapshot.child(name.getName()).exists()) {
up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
names.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
score = dataSnapshot.child("Test").child("Name").getValue(long.class);
score += 1;
final Name name = new Name(txtName.getText().toString(), score);
try {
names.child(name.getName()).setValue(name);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Toast.makeText(Result.this, "Thank you for voting", Toast.LENGTH_SHORT).show();
Intent homeIntent3 = new Intent(Result.this, StartActivity.class);
startActivity(homeIntent3);
}
});
这是数据库
因此,如果该名称不存在,我可以轻松添加得分 = 1 或得分 = -1 的赞成/反对票。
但是如果名字存在的话,改变分数值就有问题了。
应用程序因以下错误而崩溃
java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference
at user.prof.name.Activities.Result$1$1$1.onDataChange(Result.java:80)
at com.google.firebase.database.obfuscated.zzap.zza(com.google.firebase:firebase-database@@16.0.3:75)
at com.google.firebase.database.obfuscated.zzca.zza(com.google.firebase:firebase-database@@16.0.3:63)
at com.google.firebase.database.obfuscated.zzcd$1.run(com.google.firebase:firebase-database@@16.0.3:55)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6589)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
这是代码中的错误行
score = dataSnapshot.child("Test").child("Name").getValue(long.class);
我不是数据库编程方面的专家,但有什么问题? 找错孩子了?
我还尝试将“分数”保存为字符串并将其解析为长值。但这也行不通。
【问题讨论】:
-
我看到的第一件事是
Name本身并不是一个属性,而且您还有一个单独的节点来存储实际值。我会做这样的代码:score = dataSnapshot.child("Test").child("Name1").child("Name1").getValue(String.class); -
谢谢。但是有了这个我得到了同样的错误
标签: java android firebase firebase-realtime-database