我正在尝试从Firebase数据库读取到我的应用程序,但经过几次努力后仍无法正常工作。
这是firebase数据库:
我正试图像这样从孩子那里检索两个值:
sharedPref = getPreferences(MODE_PRIVATE);
String UserId = sharedPref.getString("firebasekey", "");
final TextView mkid1ID = (TextView) findViewById(R.id.kid1);
final TextView mkid2ID = (TextView) findViewById(R.id.kid2);
mDatabaseUser_Kid1ID = FirebaseDatabase.getInstance().getReference().child("users").child(UserId).child("Kid1ID");
mDatabaseUser_Kid2ID = FirebaseDatabase.getInstance().getReference().child("users").child(UserId).child("kid2ID");
mDatabaseUser_Kid2ID.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mkid2ID.setText(dataSnapshot.getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mDatabaseUser_Kid1ID.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mkid1ID.setText(dataSnapshot.getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
到这样的布局
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/kid1"
android:clickable="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/kid2"
android:clickable="true"/>
我是android开发的新手,谢谢,我需要帮助
答案 0 :(得分:1)
您在数据库引用中的JSON结构中缺少kids
:
mDatabaseUser_Kid1ID = FirebaseDatabase.getInstance().getReference().child("users").child(UserId).child("kids/kid1ID");
mDatabaseUser_Kid2ID = FirebaseDatabase.getInstance().getReference().child("users").child(UserId).child("kids/kid2ID");
除此之外,我可能会简化代码以在所有用户kids
上使用单个侦听器,然后仅读取单个onDataChange
上的两个属性:
mDatabaseUser_Kids = FirebaseDatabase.getInstance().getReference().child("users").child(UserId).child("kids");
mDatabaseUser_Kids.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mkid1ID.setText(dataSnapshot.child("kid1ID").getValue(String.class));
mkid2ID.setText(dataSnapshot.child("kid2ID").getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseErrors.toException(); // don't ignore errors
}
});
答案 1 :(得分:-4)
使用此方法
private void getDataFrom() {
String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference mCustomerDatabase = FirebaseDatabase.getInstance().getReference().child("users").child("kids");
mCustomerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
if (map.get("kid1ID") != null) {
kid1ID= map.get("title").toString();
Log.i("kid1ID",String.valueOf(kid1ID));
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}