Я пытаюсь перечислить всех пользователей, у которых дочерний элемент session: 2011
из базы данных Firebase Realtime, в 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();
}