在Android活动中从Firebase检索数据

时间:2018-09-20 08:32:50

标签: java android firebase firebase-realtime-database

我阅读了许多有关如何从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数据如下:

enter image description here

有人可以帮我吗?

提前谢谢您。

3 个答案:

答案 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