java - 从 Android Studio 中的 Firebase 数据库读取对象

标签 java android firebase object firebase-realtime-database

使用 Android Studio 和 Firebase,我尝试写入和读取一些数据。

我有一个 Pub 类,其中包含以下内容:

package com.example.jef.pubbuddy.Database;
import java.util.ArrayList;
public class Pub {
private String name;
private float longitude;
private float lattitude;
private ArrayList<Pub> Pubs = new ArrayList<>();
public Pub() {}

public void setName(String name)
{this.name = name;}
public void setLongitude(float longitude)
{this.longitude = longitude;}
public void setLatitude(float lattitude)
{this.lattitude = lattitude;}
public String getName()
{return name;}
public float getLatitude()
{return lattitude;}
public float getLongitude()
{return longitude;}

我使用 .push() 方法将 Pub 对象写入数据库。以下是我将其写入数据库的方法。它在 Firebase 控制台中显示得很好,所以我相信问题不在于这里:

Pub p1 = new Pub();
       p1.setName("The name of the pub");
       p1.setLatitude((float) 4.699545);
       p1.setLongitude((float) 50.878267);
myRef.child("PUSH_TEST").push().setValue(p1);

之后我尝试使用以下代码来读取它。请注意,消息方法仅用于将一些信息附加到 TextView,因此我可以在我的物理设备上进行调试。但是,没有任何监听器事件被触发。 有谁知道我在这里做错了什么?已经遵循官方 Firebase 文档和“Firebase 周末”培训视频。还在 Stackoverflow 上查找了无数答案,但我似乎无法使其工作。

提前致谢。

public class Database extends AppCompatActivity {
private TextView tv;
int messages;
private ArrayList<Pub> pubList = new ArrayList();
private FirebaseDatabase database;
private DatabaseReference myRef;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_database);

    database = FirebaseDatabase.getInstance();
    myRef = database.getReference();
    init();
    writeData();
    message("creating and attaching the listener");
    ChildEventListener myListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s)
        {
            message("The childEvent triggered");
            Pub p = dataSnapshot.getValue(Pub.class);
            message("The name of this pub = " + p.getName());
            pubList.add(p);
        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {}
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    myRef.child("PUSHTEST").addChildEventListener(myListener);
}

最佳答案

一切都是正确的,除了这个:

在这里设置值:

myRef.child("PUSH_TEST").push().setValue(p1);

在这里您可以检索值:

myRef.child("PUSHTEST").addChildEventListener(myListener);

您编写的子项是错误的,因为它不在您的数据库中。所以只需将其更改为:

myRef.child("PUSH_TEST").addChildEventListener(myListener);

child(..) 中的名称需要与数据库中的名称相同

关于java - 从 Android Studio 中的 Firebase 数据库读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953996/

相关文章:

java - Android Studio 中使用 setOnClickListener 的循环

java - 如何在 Spring Boot 2.0 中启用 "hystrix.stream"?

java - 如何处理 RCP 关闭时 UI 报告的长时间操作?

java - 生成随机数时出现非法参数异常

android - 应用内购买在 playstore 中不起作用,而 playstore 以前在市场上起作用

node.js - 如何在 .ts 而不是 .js 中显示 Typescript 运行时错误/异常

android - 使用 android 在 firebase 数据库中搜索子节点

android - 可以在一个 Android 应用程序中使用两个不同的 Firebase 项目,特别是 crashlytics、消息传递和性能扩展

java - 当分配新的子类时,JPanel 不会重新绘制

java - `malloc` 和 `free` Java NDK Wrap 是克服 Android 自动回收的唯一方法吗?