gpt4 book ai didi

java - Firebase 获取条目的当前值

转载 作者:行者123 更新时间:2023-12-02 01:52:30 24 4
gpt4 key购买 nike

在我的应用程序中有一个分数条目,应该计算用户的每张投票。因此,如果用户投票,score 的值就会增加大约 1。

我知道如何设置新值,但无法获取当前条目。

这样我就可以记录实际分数:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("test").orderByChild("name");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
long score = ds.child("score").getValue(Long.class);
Log.d(TAG, "Score: " + score);
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
query.addListenerForSingleValueEvent(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();
}
}

错误消息:

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)

你有什么想法吗?

编辑:

结构如下:

Firebase-root
|
--- test
|
--- Name1
| |
| --- name: "Name1"
| |
| --- score: 0
|
--- Name2
|
--- name: "Name2"
|
--- score: 15

最佳答案

检查结构后,您可以使用类似的方法来更改第一个 Name1 (例如):

score = dataSnapshot.child("test").child("Name1").child("score").getValue();

然后通过setValue()设置您的数据。

请注意,只有当您的查询没有任何问题并且首先获取引用时,此方法才有效。

更新:您可能需要使用addListenerForSingleValueEvent来避免循环。

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("test"); 
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {

score = dataSnapshot.child("Name1").child("score").getValue();

...
// and the rest

关于java - Firebase 获取条目的当前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52790896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com