java - 检索firebase实时数据库中节点下的所有数据
问题描述
我有一个 firebase 实时数据库,想用这些数据制作排行榜。我试图检索我的分数节点中的所有数据,但不确定如何循环获取所有用户的分数。
我尝试使用的代码是这样的:
package com.example.securityapp;
import androidx.appcompat.app.AppCompatActivity;
import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import static java.lang.System.in;
public class leaderboard extends AppCompatActivity {
DatabaseReference databaseUsers;
FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseAuth mAuth;
TextView score;
private static final String TAG = "leaderboard";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leaderboard);
databaseUsers = database.getReference().child("Scores");
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
score = (TextView) findViewById(R.id.leaderboard_score);
databaseUsers.child("Scores").addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
System.out.println("The scores are " + dataSnapshot.child("Points").getValue().toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
});
}
}
解决方案
您对 JSON 的了解太深了,并且正在阅读/Points/Points
. 由于该节点不存在,您会在onDataChange
.
database.getReference().child("Scores").addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Log.i(TAG, "The scores are " + dataSnapshot.child("Points").getValue(Long.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
});
返回值的新代码:
public class leaderboard extends AppCompatActivity {
DatabaseReference databaseUsers;
FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseAuth mAuth;
TextView score;
private static final String TAG = "leaderboard";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leaderboard);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
score = (TextView) findViewById(R.id.tableText);
database.getReference().child("Scores").addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
System.out.println("The score is: " + snapshot.toString());
score.setText(snapshot.toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
});
}
}
这是我的进步:
推荐阅读
- image - 从单元格中删除图像并显示新单元格高度的问题
- python - 如何逐行打印命令 output.txt
- c++ - 鼠标单击 QSpinBox::validate 中显示的工具提示会导致崩溃
- php - Laravel 5.2:/vendor/laravel/framework/src/Illuminate/Container/Container.php:734 中不存在类日志
- android - 未解析的类:FileProvider——使用下载的 JAR
- xampp - 文件更新时 Xampp 不会重新加载更改
- c++ - Visual Studio 的字符集编码
- azure - ARM嵌套模板'无效模板找不到模板资源'
- ada - 您如何在 Ada 中存储(访问)整数运算符?
- apache-kafka - Alpakka Kafka:模式注册表的序列化异常中断了流