所以目前我的应用程序具有创建组的功能,在我的情况下,我将其称为团队,用户可以选择加入他们想要的团队。用户可以单击团队列表并选择加入他们。加入后,他们可以再次点击该团队,然后将他们引导至聊天室。我使用Firebase作为我的后端。
所以这就是我的问题,我应该创建一个名为"会员"存储团队ID及其成员?如果是这样,我该怎么做?我不知道应该如何或在何处存储此成员的事物以及用户离开的那一刻,应该更新数据库中的成员。如果有人能帮助我,我真的很感激。
这是显示团队列表的地方。
MainActivity:
//firebase auth object
private FirebaseAuth firebaseAuth;
EditText editTextName;
EditText textDate;
EditText textTime;
Spinner spinnerSport;
ListView listViewTeams;
DatePickerDialog datePickerDialog;
//a list to store all the team from firebase database
List<Team> teams;
//our database reference object
DatabaseReference databaseTeams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
mSheetLayout.setFab(mFab);
mSheetLayout.setFabAnimationEndListener(this);
//initializing firebase authentication object
firebaseAuth = FirebaseAuth.getInstance();
//if the user is not logged in
//that means current user will return null
if(firebaseAuth.getCurrentUser() == null){
//closing this activity
finish();
//starting login activity
startActivity(new Intent(this, SignInActivity.class));
}
//getting current user
FirebaseUser user = firebaseAuth.getCurrentUser();
//getting the reference of teams node
databaseTeams = FirebaseDatabase.getInstance().getReference("teams");
//getting views
editTextName = (EditText) findViewById(R.id.editTextName);
spinnerSport = (Spinner) findViewById(R.id.spinnerSports);
listViewTeams = (ListView) findViewById(R.id.listViewTeams);
textDate = (EditText) findViewById(R.id.textDate);
textTime = (EditText) findViewById(R.id.textTime);
//list to store teams
teams = new ArrayList<>();
//attaching listener to listview
listViewTeams.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//getting the selected team
Team team = teams.get(i);
//creating an intent
Intent intent = new Intent(getApplicationContext(), ChatRoomActivity.class);
//putting team name and id to intent
intent.putExtra(TEAM_ID, team.getTeamId());
intent.putExtra(TEAM_NAME, team.getTeamName());
//starting the activity with intent
startActivity(intent);
}
});
listViewTeams.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
Team team = teams.get(i);
showUpdateDeleteDialog(team.getTeamId(), team.getTeamName());
return true;
}
});
}
private void showUpdateDeleteDialog(final String teamId, String teamName) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.update_dialog, null);
dialogBuilder.setView(dialogView);
final EditText editTextName = (EditText) dialogView.findViewById(R.id.editTextName);
final Spinner spinnerSport = (Spinner) dialogView.findViewById(R.id.spinnerSports);
final Button buttonUpdate = (Button) dialogView.findViewById(R.id.buttonUpdateTeam);
final Button buttonDelete = (Button) dialogView.findViewById(R.id.buttonDeleteTeam);
final EditText textDate = (EditText) dialogView.findViewById(R.id.textDate);
final EditText textTime = (EditText) dialogView.findViewById(R.id.textTime);
dialogBuilder.setTitle(teamName);
final AlertDialog b = dialogBuilder.create();
b.show();
// perform click event on edit text
textDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// calender class's instance and get current date , month and year from calender
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR); // current year
int mMonth = c.get(Calendar.MONTH); // current month
int mDay = c.get(Calendar.DAY_OF_MONTH); // current day
// date picker dialog
datePickerDialog = new DatePickerDialog(MainActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
// set day of month , month and year value in the edit text
textDate.setText(dayOfMonth + "/"
+ (monthOfYear + 1) + "/" + year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
});
// perform click event listener on edit text
textTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar mcurrentTime = Calendar.getInstance();
int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
int minute = mcurrentTime.get(Calendar.MINUTE);
TimePickerDialog mTimePicker;
mTimePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
textTime.setText(selectedHour + ":" + selectedMinute);
}
}, hour, minute, true);//Yes 24 hour time
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
});
buttonUpdate.setOnClickListener(new View.OnClickListener() {
FirebaseUser user = firebaseAuth.getCurrentUser();
@Override
public void onClick(View view) {
String name = editTextName.getText().toString().trim();
String sport = spinnerSport.getSelectedItem().toString();
String owner = user.getUid();
String date = textDate.getText().toString();
String time = textTime.getText().toString();
if (!TextUtils.isEmpty(name)) {
updateTeam(teamId, name, sport, owner, date, time);
b.dismiss();
}
}
});
buttonDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
deleteTeam(teamId);
b.dismiss();
}
});
}
private boolean updateTeam(String id, String name, String sport, String owner, String date, String time) {
//getting the specified team reference
DatabaseReference dR = FirebaseDatabase.getInstance().getReference("teams").child(id);
//updating team
Team team = new Team(id, name, sport, owner, date, time);
dR.setValue(team);
Toast.makeText(getApplicationContext(), "Team Updated", Toast.LENGTH_LONG).show();
return true;
}
private boolean deleteTeam(String id) {
//getting the specified artist reference
DatabaseReference dR = FirebaseDatabase.getInstance().getReference("teams").child(id);
//removing team
dR.removeValue();
//getting the tracks reference for the specified artist
DatabaseReference drTracks = FirebaseDatabase.getInstance().getReference("tracks").child(id);
//removing all tracks
drTracks.removeValue();
Toast.makeText(getApplicationContext(), "Team Deleted", Toast.LENGTH_LONG).show();
return true;
}
@Override
protected void onStart() {
super.onStart();
//attaching value event listener
databaseTeams.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//clearing the previous team list
teams.clear();
//iterating through all the nodes
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
//getting team
Team team = postSnapshot.getValue(Team.class);
//adding team to the list
teams.add(team);
}
//creating adapter
TeamList teamAdapter = new TeamList(MainActivity.this, teams);
//attaching adapter to the listview
listViewTeams.setAdapter(teamAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_logout:
//logout code
//logging out the user
firebaseAuth.signOut();
//closing activity
finish();
//starting login activity
startActivity(new Intent(this, SignInActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
当用户点击其中一个团队时,如果他/她还不是会员,则会出现这个对话框。
join_dialog.xml:
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Do you want to join this team?"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/buttonYes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Yes" />
<Button
android:id="@+id/buttonNo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="No" />
</LinearLayout>
这就是我的数据库的样子,无论你点击哪个团队,聊天目前都可以访问,我会在其他时间到达。如果有任何不充分的信息,请告诉我,我会尽可能多地提供。提前谢谢。