我阅读了许多有关如何从Firebase数据库实例获取数据的线程,但是没有一个对我有用。
我在活动中的代码:
public class Violations extends AppCompatActivity
{
TextView textView7;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbref = database.getReference("save");
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_violations);
textView7 = findViewById(R.id.textView7);
dbref.addValueEventListener(new ValueEventListener()
{
ArrayList<String> Violations = new ArrayList<>();
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
for (DataSnapshot postSnapshot: dataSnapshot.getChildren())
{
Violations.add(postSnapshot.getValue().toString());
System.out.println(postSnapshot.getValue().toString());
}
for(int i=0; i < Violations.size(); i++)
{
textView7.setText(textView7.getText() + Violations.get(i) + System.lineSeparator());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
}
那里没有错误,但是没有数据显示。我很确定,我的问题是连接到正确的实例并检索数据。
Firebase数据如下:
有人可以帮我吗?
提前谢谢您。
答案 0 :(得分:2)
初始化Firebase数据库和DatabaseReference
方法中的onCreate()
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_violations);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbref = database.getReference("save");
...
..
此外,您获得的参考是save
,但是Firebase数据库显示的是:you violate ...
。您可以尝试将名称更改为save
或获取正确的数据:you violate ...
。
答案 1 :(得分:1)
尝试使用addListenerForSingleValue()
代替addValueEventListener()
。希望能帮助到你。并将您的Firebase链接save
更改为you violate your own speed limit with
答案 2 :(得分:1)
我在您的数据库模式中看不到名为save
的引用,但我看到了一个名为You violate your own speed limit with
的引用,该引用必须在您的引用中使用才能从数据库中获取数据。因此,为解决此问题,请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("You violate your own speed limit with");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<String> violations = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String speed = ds.getValue(String.class);
violations.add(speed);
Log.d(TAG, speed);
}
//Do what you need to do with y our violations list
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
ref.addListenerForSingleValueEvent(valueEventListener);
logcat中的结果将是所有这些值:
3 km / h at time: ...
3 km / h at time: ...
//an so on