【问题标题】:Firebase - Retrieve User Information from DatabaseFirebase - 从数据库中检索用户信息
【发布时间】:2018-03-11 01:50:42
【问题描述】:

> 我有 3 节课。

  • DriverDatabase.class
  • AddInfoDriver.class
  • DriverProfile.class

在DriverDatabase.class 中我设置了(fName, lName .... 和其他字段。)。另外,为这些属性添加{get; and set;}。

在AddInfoDriver.class 中,我引用了FirebaseDatabase 和DriverDatabase.class,这样,每当用户填写这些编辑文本时,它就会保存到 Firebase 数据库。

问题是:我无法检索 DriverProfile.class 中的那 5 个 Edittext 值,下面是检索代码。

public class DriverProfile extends Fragment {

@BindView(R.id.btn_save) Button btnsave;
@BindView(R.id.edtx_DoB) EditText edtxdob;
@BindView(R.id.edtx_fname) EditText edtx_fname;
@BindView(R.id.edtx_lname) EditText edtx_lname;
@BindView(R.id.spinner_type) Spinner spn_type;
@BindView(R.id.edtx_number) EditText edtx_number;

private DatabaseReference driverfname, driverlname;


public DriverProfile() {
//Constructed is required

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_my_profile, container, false);
    ButterKnife.bind(this, view);

    driverfname = FirebaseDatabase.getInstance().getReference().child("Drivers").child("fname");
    driverlname  = FirebaseDatabase.getInstance().getReference().child("Drivers").child("lname");

    driverfname.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            edtx_fname.setText(dataSnapshot.getValue(String.class));
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

没有编写所有的edittext代码,只需查看我的ValueEventListener以获得驱动程序的fname。驱动程序保存在child("Drivers")中时不显示数据

【问题讨论】:

  • 请分享您的数据库结构。
  • 我已经编辑了我的问题,在 firebase 控制台中上传了数据库结构
  • 您需要一个司机或所有司机的数据吗?
  • 适用于所有驱动程序。实际上,我有 SMS 身份验证,如果我了解如何检索它,我会在每次身份验证后进行。每个司机的个人信息都应该显示在他自己的页面中。

标签: android firebase firebase-realtime-database


【解决方案1】:

要从所有驱动程序获取值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference driversRef = rootRef.child("Drivers");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String cardNumber = ds.child("cardNumber").getValue(String.class);
            String cardType = ds.child("cardType").getValue(String.class);
            String dateOfBirth = ds.child("dateOfBirth").getValue(String.class);
            String name = ds.child("name").getValue(String.class);
            String surname = ds.child("surname").getValue(String.class);
            Log.d("TAG", cardNumber + " / " + cardType + " / " + dateOfBirth + " / " + name + " / " + surname);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
driversRef.addListenerForSingleValueEvent(eventListener);

【讨论】:

  • 完美解决方案兄弟!!谢谢。我可以再问一件事@Alex 吗?
  • 在一个项目中,我必须应用程序。如何将两个应用程序连接在一起以共享数据。客户端应用程序和驱动程序应用程序。客户点了热狗和其他零食,司机应该看到这些订单。我已经使用 recyclerview 和适配器完成了所有任务。唯一剩下的就是将两个应用程序连接在一起。阅读文档,我真的不清楚
  • 我想你可能对this感兴趣。
  • 太棒了。谢谢兄弟
  • 这基本上是另一个问题。为了遵守本社区的规则,请再发一个新问题,以便我和其他用户可以帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
相关资源
最近更新 更多