繁体   English   中英

如何使用 AndroidStudio 中的 Java 方法从 Firebase 实时数据库读取值?

[英]How can I read values from Firebase Realtime Database by using a Java method in AndroidStudio?

我的 Firebase 实时数据库是通过加载 Java 类 HashMap 的对象构建的。 在我的 Android Studio 应用程序中,我试图编写一个以字符串(键)作为输入的方法,搜索数据库,如果找到字符串,则返回关联的浮点数(值),否则返回 0。如何我可以这样做吗? 任何帮助将非常感激!

编辑:我试图遵循这些建议,使它们适应我的特定情况,但我还没有设法解决问题。
我在 MainActivity 中编写了以下代码:

DatabaseReference myRef;
Float tempValue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    myRef = FirebaseDatabase.getInstance().getReference("myRoot");
    tempValue=0f;
    ...
}

public void retrieveValueFromDatabase(String childName, final MainActivity activity){
    myRef.child(childName).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Float value=dataSnapshot.getValue(Float.class);
            if (value==null){
                value=0f;
            }
            activity.tempValue=value;
            //First Toast
            //Toast.makeText(activity,"tempValue = "+tempValue.toString(), Toast.LENGTH_LONG).show();
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
}

public void useValues(){
    retrieveValueFromDatabase(childName,this);
    //Second Toast
    //Toast.makeText(this,"tempValue = "+tempValue.toString(), Toast.LENGTH_LONG).show();
    //code using tempValue from here
    ...
}

如果取消注释第一个 toast,则会显示tempValue的正确值,但如果取消注释第二个 toast,则显示的tempValue值是默认值 (0.0)。 我错过了什么?

您需要使用addValueEventListener从数据库中检索数据:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("myRoot").orderByChild("name").equalTo("peter");
ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i("Database", dataSnapshot.child("floatValue").getValue(Long.class));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
})

在这里,您添加对根节点的引用,然后使用equalTo()查询以检查数据库中是否存在name = peter并返回浮点值。

你应该阅读指南:

https://firebase.google.com/docs/database/android/read-and-write

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM