public
class
ParticipatingGroupRepository implments ValueEventListener {
interface
Listener {
void
onSuccess(List<GroupId> groupIdList);
void
onCancel(DatabaseError error);
}
private
static
final
USERS_PATH =
"users"
private
static
final
PARTICIPATING_GROUPS_PATH =
"participatingGroups"
private
final
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference();
@Nullable
private
Listener listener;
private
ParticipatingGroupRepository() {
initParticipatingGroups();
}
private
void
initParticipatingGroups(){
dbRef.child(USERS_PATH)
.child(getCurrentUser().getUid())
.child(PARTICIPATING_GROUPS_PATH)
.addValueEventListener(
this
);
}
public
void
setListener(
@Nullable
Listener listener) {
this
.lisetner = listener;
}
private
FirebaseUser getCurrentUser() {
return
FirebaseAuth.getInstance().getCurrentUser();
}
@Override
public
void
onDataChange(
@NonNull
DataSnapshot snapshot) {
handleSuccess(snapshot);
}
@Override
public
void
onCancelled(
@NonNull
DatabaseError error) {
if
(lisetner ==
null
)
return
;
listener.onCancel(error);
}
private
void
handleSuccess(DataSnapshot snapshot) {
List<GroupId> groupIdList =
new
ArrayList<GroupId>();
for
(DataSnapshot dataSnapshot : snapshot.getChildren()){
GroupId groupId = dataSnapshot.getValue(GroupId.
class
);
if
(groupId!=
null
) {
groupIdList.add(groupId);
}
}
if
(lisetner ==
null
)
return
;
listener.onSuccess(groupIdList)
}
}
public
class
ParticipantsRecyclerViewAdapter
extends
RecyclerView.Adapter<RecyclerView.ViewHolder> {
private
final
List<GroupId> groupIdList =
new
ArrayList<>();
public
void
submitList(List<GroupId> groupIdList) {
this
.groupIdList.clear();
this
.groupIdList.addAll(groupIdList);
notifyDataSetChanged();
}
...
}
public
class
MainActivity
extends
AppCompatActivity
implements
ParticipatingGroupRepository.Listener {
private
ParticipatingGroupRepository participatingGroupRepository;
private
ParticipantsRecyclerViewAdapter participantsRecyclerViewAdapter;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
participatingGroupRepository =
new
ParticipatingGroupRepository();
setupViews();
}
private
void
setupView() {
participantsRecyclerViewAdapter =
new
ParticipantsRecyclerViewAdapter();
}
@Override
public
void
onShow() {
super
.onShow();
participatingGroupRepository.setListener(
this
);
}
public
void
onStop() {
super
.onStop();
participatingGroupRepository.setListener(
null
);
}
@Override
public
void
onSuccess(List<GroupId> groupIdList) {
participantsRecyclerViewAdapter.submitList(groupIdList);
}
@Override
public
void
onCancel(DatabaseError error) {
}
}