【发布时间】:2018-09-12 19:36:49
【问题描述】:
我正在尝试将 Firebase 实时数据库中子 session: 2011 的所有用户列出到 ListView 中。这是我的数据结构:
{
"Users" : {
"uid1" : {
"name" : "Jhon",
"session" : 2011
},
"uid2" : {
"name" : "Kim",
"session" : 2011
}
}
}
这是我的列表活动:
public class ListActivity extends AppCompatActivity {
ListView lv;
FirebaseListAdapter adapter;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users");
ref.child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String session = dataSnapshot.child("session").getValue().toString();
if (session.equals("2011")) {
Query query = FirebaseDatabase.getInstance().getReference().child("Users");
lv = (ListView) findViewById(R.id.listView);
FirebaseListOptions < profile > options = new FirebaseListOptions.Builder < profile > ()
.setLayout(R.layout.profile)
.setQuery(query, profile.class)
.build();
adapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(View v, Object model, int position) {
TextView name = v.findViewById(R.id.name);
TextView session = v.findViewById(R.id.session);
profile user = (profile) model;
name.setText("Name: " + user.getName().toString());
session.setText("Session: " + user.getSession().toString());
}
};
lv.setAdapter(adapter);
} else {
//
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
这是我的profile 课程:
public class profile {
private String name;
private String session;
public profile() {}
public profile(String name, String session) {
this.name = name;
this.session = session;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSession() {
return session;
}
public void setSession(String session) {
this.session = session;
}
}
但问题是,它没有返回任何东西。我在这里想念什么?
作为参考,我尝试了以下,但是当我这样做时,它只返回了当前登录的用户的值。没有别的。
Query query = FirebaseDatabase.getInstance().getReference().child("Users");
lv = (ListView) findViewById(R.id.listView);
FirebaseListOptions < profile > options = new FirebaseListOptions.Builder < profile > ()
.setLayout(R.layout.profile)
.setLifecycleOwner(IdCheckActivity.this)
.setQuery(query, profile.class)
.build();
adapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(View v, Object model, int position) {
TextView name = v.findViewById(R.id.name);
TextView session = v.findViewById(R.id.session);
profile user = (profile) model;
name.setText("Name: " + user.getName().toString());
session.setText("Session: " + user.getSession().toString());
}
};
lv.setAdapter(adapter);
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.startListening();
}
【问题讨论】:
标签: android firebase firebase-realtime-database