Firebase加入群组并成为会员

时间:2017-04-02 13:36:52

标签: android firebase firebase-realtime-database

所以目前我的应用程序具有创建组的功能,在我的情况下,我将其称为团队,用户可以选择加入他们想要的团队。用户可以单击团队列表并选择加入他们。加入后,他们可以再次点击该团队,然后将他们引导至聊天室。我使用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>

我还没有添加任何按钮以允许用户离开团队,让我们假设有一个。 Database

这就是我的数据库的样子,无论你点击哪个团队,聊天目前都可以访问,我会在其他时间到达。如果有任何不充分的信息,请告诉我,我会尽可能多地提供。提前谢谢。

0 个答案:

没有答案