Java 使用firebase列表适配器读取和写入firebase数据库

Java 使用firebase列表适配器读取和写入firebase数据库,java,android,firebase,listview,firebase-realtime-database,Java,Android,Firebase,Listview,Firebase Realtime Database,我正试图在列表视图中从Firebase数据库读取数据。列表视图中的每个项目都有一个按钮,单击该按钮后,文本视图中的读取数据集将写入数据库。下面的代码是我用来显示ListView和写入数据库的代码 } } 这是我的驾驶课 public class DRive { private String Pickuptime; private String Pickupspot; private String Dropoffspot; private String passengers; private St

我正试图在
列表视图中从Firebase数据库读取数据。
列表视图中的每个项目都有一个按钮,单击该按钮后,文本视图中的读取数据集将写入数据库。下面的代码是我用来显示
ListView
和写入数据库的代码

} }

这是我的驾驶课

public class DRive {
private String Pickuptime;
private String Pickupspot;
private String Dropoffspot;
private String passengers;
private String Key;
public DRive(String passengers, String Pickupspot, String Pickuptime, String Dropoffspot, String Key){
    this.Dropoffspot=Dropoffspot;
    this.Pickupspot=Pickupspot;
    this.passengers=passengers;
    this.Pickuptime=Pickuptime;
    //mestime=new Date().getTime();

}
public DRive(){

}
public String getPickuptime(){
    return Pickuptime;
}

public void setPickuptime(String time) {
    this.Pickuptime = time;
}

public String getDropoffspot() {
    return Dropoffspot;
}

public void setDropoffspot(String dropoffspot) {
    this.Dropoffspot = Dropoffspot;
}

public String getPickupspot() {
    return Pickupspot;
}

public void setPickupspot(String pickupspot) {
    this.Pickupspot = Pickupspot;
}

public String getPassengers() {
    return passengers;
}

public String getKey() {
    return Key;
}

public void setKey(String key) {
    Key = key;
}
应用程序应该使用
FirebaseListAdapter
从子
order\u details
读取数据,并在
ListView
中显示这些数据,而不是不显示这些数据


应用程序应该使用
FirebaseListAdapter
从数据库读取数据,并在listview的部分显示检索到的数据,而它甚至不显示
listview
。请提供帮助。

在您的
订单\u详细信息
节点和实际的
驱动器
对象之间有另一个子对象。正如我在数据库中看到的,是经过身份验证的用户的
uid
。为了解决这个问题,你还需要给那个孩子添加一个电话。因此,请更改以下代码行:

Query query=FirebaseDatabase.getInstance().getReference().child("order_details");

编辑:

无法使用实际的数据库结构查询数据库并一次性获取所有用户的所有订单。如果您想这样做,您应该重新考虑您的数据库结构,或者简单地复制数据。如果要获取所有用户的所有订单,请参阅以下可能的模式:

Firebase-root
  |
  --- order_details
        |
        --- orderIdOne
        |     |
        |     --- //orderDetails
        |     |
        |     --- uid: "DEzUoNY6BqOVn1DVIbFwOk6B4dT2"
        |
        --- orderIdTwo
              |
              --- //orderDetails
              |
              --- uid: "USw0LFY6BqOVn1DVIbFwOkhcvPwf"
要获取所有订单,只需在
order\u details
节点上附加一个侦听器,如果要获取与单个用户对应的所有订单,请使用以下查询:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference orderDetailsRef = rootRef.child("order_details");
Query query = orderDetailsRef.orderByChild("uid").equalTo(uid);
query.addListenerForSingleValueEvent(/* ... */);
Edit2:

由于
DRive
类中的字段与数据库中的字段不匹配,因此您没有得到任何信息。要解决这个问题,请参阅我在以下帖子中的答案:


在您的
订单详细信息
节点和实际的
驱动器
对象之间有另一个子对象。正如我在数据库中看到的,是经过身份验证的用户的
uid
。为了解决这个问题,你还需要给那个孩子添加一个电话。因此,请更改以下代码行:

Query query=FirebaseDatabase.getInstance().getReference().child("order_details");

编辑:

无法使用实际的数据库结构查询数据库并一次性获取所有用户的所有订单。如果您想这样做,您应该重新考虑您的数据库结构,或者简单地复制数据。如果要获取所有用户的所有订单,请参阅以下可能的模式:

Firebase-root
  |
  --- order_details
        |
        --- orderIdOne
        |     |
        |     --- //orderDetails
        |     |
        |     --- uid: "DEzUoNY6BqOVn1DVIbFwOk6B4dT2"
        |
        --- orderIdTwo
              |
              --- //orderDetails
              |
              --- uid: "USw0LFY6BqOVn1DVIbFwOkhcvPwf"
要获取所有订单,只需在
order\u details
节点上附加一个侦听器,如果要获取与单个用户对应的所有订单,请使用以下查询:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference orderDetailsRef = rootRef.child("order_details");
Query query = orderDetailsRef.orderByChild("uid").equalTo(uid);
query.addListenerForSingleValueEvent(/* ... */);
Edit2:

由于
DRive
类中的字段与数据库中的字段不匹配,因此您没有得到任何信息。要解决这个问题,请参阅我在以下帖子中的答案:


我找到了解决问题的方法。我添加了一个onstart和onstop侦听器,如下所示

  @Override 
   protected void onStart() {
        super.onStart();
        adapter.startListening();
   }
   @Override 
    protected void onStop() {
         super.onStop();
         adapter.stopListening();
   }
  }
例如,我还通过在引入Textview后添加“v”来调整我的Textview代码。 而不是 最终文本视图f=(文本视图)findViewById(R.id.timed); 我把它改成了
最终文本视图f=(文本视图)v。findviewbyd(R.id.timed)

我找到了解决问题的方法。我添加了一个onstart和onstop侦听器,如下所示

  @Override 
   protected void onStart() {
        super.onStart();
        adapter.startListening();
   }
   @Override 
    protected void onStop() {
         super.onStop();
         adapter.stopListening();
   }
  }
例如,我还通过在引入Textview后添加“v”来调整我的Textview代码。 而不是 最终文本视图f=(文本视图)findViewById(R.id.timed); 我把它改成了
最终文本视图f=(文本视图)v。findviewbyd(R.id.timed)

问题是,这只是在json文件中写入一个用户,一旦其他用户访问应用程序,他们将以与我相同的方式写入数据,我希望所有这些数据都可以在列表视图中访问。相同顺序下会有不同的用户id。\u details nodeFair足够了,但您仍需要将调用添加到
.child(uid)
。你试过了吗?它有效吗?我没有,但它不会只返回当前用户的数据吗?理想情况下,用户应该查看所有其他用户的数据,因此您应该尝试一下。同时,请看我更新的答案。非常感谢,我会在早上第一件事尝试,我真的很感激,这很有意义,我相信它会起作用。事情是,这只是一个用户在json文件中的写入,一旦其他用户访问应用程序,他们将以与我相同的方式写入数据,我希望所有这些数据都可以在列表视图中访问。相同顺序下会有不同的用户id。\u details nodeFair足够了,但您仍需要将调用添加到
.child(uid)
。你试过了吗?它有效吗?我没有,但它不会只返回当前用户的数据吗?理想情况下,用户应该查看所有其他用户的数据,因此您应该尝试一下。同时,请看我的最新答案。非常感谢,我会在早上第一件事就尝试,我真的很感激,它很有意义,我相信它会起作用