我能够从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);
}
}
这是我的userinfo类:
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;
}
}
这是我的数据库:
我只是在列表视图中获取WjGb6At3hRdvOBBFysv65XG37k53用户
答案 0 :(得分:2)
你的问题不是很清楚。根据用户数据,如果您指的是其他用户的user
对象,那么简单地说,您无法获取其他用户的user
对象,无论他们是否签名 - 在方法中。您只能通过user
方法获取自己的FirebaseAuth.getInstance().getCurrentUser()
对象。
话虽如此,如果用户的数据存储在实时数据库中,您可以使用与从其他节点获取数据相同的方式获取它。但请注意,您应用的隐私设置将决定您是否可以阅读其他用户的数据。
如果您在问题中显示数据库结构,这将有所帮助。
查看数据库结构后编辑:
好的,据我所知,这是一个非常基本的问题。您需要的是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<UserInfo>
并继续添加子pojo。此ArrayList
对象将是您的ListView
对象的数据集。
答案 1 :(得分:0)
从firebase中检索所有用户数据
Firebase ref = new Firebase(FIREBASE_URL);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
Log.e("Count " ,""+snapshot.getChildrenCount());
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
<YourClass> post = postSnapshot.getValue(<YourClass>.class);
Log.e("Get Data", post.<YourMethod>());
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("The read failed: " ,firebaseError.getMessage());
}
});