【问题标题】:How to retrieve all the user details from database in firebase如何从firebase中的数据库中检索所有用户详细信息
【发布时间】:2019-04-01 14:44:50
【问题描述】:

我能够从 Firebase 中检索数据,但只能从 android 中的数据库中检索单个用户。

我只想从数据库中获取所有用户在 firebase 中输入的所有列的数据,而无需用户身份验证登录。

 import android.os.Bundle;

 import android.support.annotation.Nullable;
 import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 import com.google.firebase.database.DataSnapshot;
 import com.google.firebase.database.DatabaseError;
 import com.google.firebase.database.DatabaseReference;
 import com.google.firebase.database.FirebaseDatabase;
 import com.google.firebase.database.ValueEventListener;

 import java.util.ArrayList;

 public class ViewDatabase extends AppCompatActivity {
     private static final String TAG = "ViewDatabase";

     private DatabaseReference databaseReference;
     private  String userID;

     private ListView mListView;

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view_database_layout);

    mListView = (ListView) findViewById(R.id.listview);
    databaseReference = FirebaseDatabase.getInstance().getReference();

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            showData(dataSnapshot);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

  }

  private void showData(DataSnapshot dataSnapshot) {
        userinfo  user = dataSnapshot.getValue(userinfo.class);

        Log.d(TAG, "showData: name: " + user.getName());
        Log.d(TAG, "showData: Mobile: " + user.getMob());
        Log.d(TAG, "showData: Vehicle: " + user.getVehicle());
        Log.d(TAG, "showData: Address: " + user.getaddress());

        ArrayList<String> array  = new ArrayList<>();
        array.add(user.getName());
        array.add(user.getMob());
        array.add(user.getVehicle());
        array.add(user.getaddress());
        ArrayAdapter adapter = new 
        ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
        mListView.setAdapter(adapter);
    }
}

这是我的用户信息类:

public class userinfo {
   public String name;
   public String mob;
   public String vehicle;
   public String address;

   public userinfo(){
}

public userinfo(String name, String mob, String vehicle, String address) {
    this.name = name;
    this.mob = mob;
    this.vehicle = vehicle;
    this.address = address;
}

public String getName() {
    return name;
}

public String getMob() {
    return mob;
}

public String getVehicle() {
    return vehicle;
}

public String getaddress() {
    return address;
}

}

这是我的数据库:

enter image description here

我只是在列表视图中获得 WjGb6At3hRdvOBBFysv65XG37k53 用户

【问题讨论】:

  • mAuth.signInAnonymously()?或者您可以更改数据库规则。
  • 您在运行这段代码时遇到了什么问题?它不运行吗?它会运行,但随后会发生与您预期不同的事情吗?您的 logcat 中是否有任何相关消息?
  • 因为我的数据库中有两个用户 uid,并且都有包含一些详细信息的字段,但是当我尝试检索两个用户 uid 详细信息时,只检索到一个用户数据

标签: android firebase-realtime-database


【解决方案1】:

你的问题不是很清楚。用户数据,如果你的意思是其他用户的user对象,那么简单地说,你无法获取其他用户的user对象,无论他们的登录方式如何。只能通过FirebaseAuth.getInstance().getCurrentUser()方法获取自己的user对象。

话虽如此,如果用户的数据存储在实时数据库中,则可以像从其他节点获取数据一样获取。但请注意,您的应用的隐私设置将决定您是否可以读取其他用户的数据。

如果您在问题中显示您的数据库结构会有所帮助。

查看数据库结构后编辑:-

好吧,据我了解,这是一个相当基本的问题。您需要的是一个childEventListener 来检索trace-5fa8c 节点的所有子节点(在您的情况下为用户)。

代码如下:-

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("trace-5fa8c");

databaseReference.addChildEventListener(new ChildEventListener() {
@Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            userinfo  user = dataSnapshot.getValue(userinfo.class);

            Log.d(TAG, "showData: name: " + user.getName());
            Log.d(TAG, "showData: Mobile: " + user.getMob());
            Log.d(TAG, "showData: Vehicle: " + user.getVehicle());
            Log.d(TAG, "showData: Address: " + user.getaddress());

            //Do whatever further processing you need
        }

        @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) {

        }
    };

此外,即使这不是您的问题的一部分,我想补充一点,每个onChildAdded(datasnapshot),您都可以获得userInfo pojo。因此,在您的showData() 方法中,不是每次都创建一个新的Arraylist,而是维护一个Arraylist&lt;UserInfo&gt;,并在每次添加孩子时不断添加孩子pojo。这个ArrayList 对象将成为您的ListView 对象的数据集。

【讨论】:

猜你喜欢
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多