Как удалить значения из Firebase, когда элемент выбран в обзоре переработчика? - PullRequest
0 голосов
/ 29 июня 2019

Мое приложение отображает пользовательские классы в recylerview.Когда пользователь выбирает определенный класс, он открывает другое действие, которое отображает детали, и есть кнопка, где пользователь может удалить класс.Когда эта кнопка нажата, я хочу удалить идентификатор класса, который сохраняется в списке классов пользователя.Я также хочу, чтобы пользовательский uid был удален из списка учащихся в классе. Кроме того, я случайно сохранил свой идентификатор класса как имя переменной uid, что не следует путать с пользовательским uid. Дайте мне знать, если у вас есть какие-либо вопросы!Вот моя структура базы данных:

   {
  "Classes" : {
"-LiGRe3e1YF_HFrHKMgi" : {
  "Students" : {
    "-LiId4URjJ8SWLAP4f4i" : "UhTQgJ4jugMqFtEZK8CsIkTqQl22",
    "-LiIeT5t1T7JpcUee_MJ" : "UhTQgJ4jugMqFtEZK8CsIkTqQl22"
  },
  "class_info" : {
    "date_clasname" : "mm",
    "room_number" : "jjhh",
    "subject" : "Science",
    "teacher" : "mm",
    "uid" : "-LiGRe3e1YF_HFrHKMgi"
  }
 }
},
 "Users" : {
"UhTQgJ4jugMqFtEZK8CsIkTqQl22" : {
  "Classes" : {
    "-LiIeT5slTjC0B3lEqNJ" : "-LiGRe3e1YF_HFrHKMgi"
    "-LiIeT5slTjC0B3lEqNJ" : "-LiGRe3e1YF_HFrHKMgi"
  },
  "User_info" : {
    "email" : "samuelford48@gmail.com",
    "grade" : "12",
    "name" : "Samuel"
      }
     }
   }
 }

Вот код моей деятельности, который показывает классы и получает данные из Firebase:

public class home_fragment extends Fragment implements View.OnClickListener {
private Button button;
//DatabaseReference dref;
//ListView listview2;
//ArrayList<String> list=new ArrayList<>();
private FirebaseDatabase database;
private DatabaseReference myRef;
private List<Listdata> list;
private RecyclerView recyclerview;
public home_fragment() {

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.home_fragment, container, false);
    //FirebaseUser fbUser = FirebaseAuth.getInstance().getCurrentUser();
    //if(fbUser == null) { Intent intent = new Intent(getContext(), LoginActivity.class);
    // startActivity(intent);}

    button = (Button) view.findViewById(R.id.button);
    button.setOnClickListener(this);
    recyclerview = (RecyclerView) view.findViewById(R.id.rview);
    database = FirebaseDatabase.getInstance();
    myRef = database.getReference("Users")
            .child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Classes");
    myRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String s) {

            list = new ArrayList<>();
            final adapter_user_remove_class recycler = new adapter_user_remove_class(list);
          //  final RecyclerviewAdapter2 recycler = new RecyclerviewAdapter2(list);
//String postkey2 = dataSnapshot.getKey();

            String class_id = dataSnapshot.getValue(String.class);

            myRef = database.getReference("Classes").child(class_id).child("class_info");
            // StringBuffer stringbuffer = new StringBuffer();
            myRef.addValueEventListener(new ValueEventListener() {

                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
{

                        Class_model new_class = dataSnapshot.getValue(Class_model.class);
                        assert new_class != null;
                        String nameofclass = new_class.getDate_clasname();
                        String teacherofclass = new_class.getTeacher();
                        String roomnumberofclass = new_class.getRoom_number();
                        String class_key = new_class.getUid();
                        Listdata listdata = new Listdata(nameofclass, teacherofclass, roomnumberofclass, class_key);
                        //String name = userdetails.getName();
                        //String email = userdetails.getEmail();
                        //String address = userdetails.getAddress();
                        listdata.setDate_class(nameofclass);
                        listdata.setTeacher(teacherofclass);
                        listdata.setRnumber(roomnumberofclass);
                   // recycler.notifyDataSetChanged();
                        list.add(listdata);
                    recycler.notifyDataSetChanged();
                        //recycler.notifyDataSetChanged();// Toast.makeText(MainActivity.this,""+name,Toast.LENGTH_LONG).show();

                }


                @Override
                public void onCancelled(DatabaseError error) {
                    AlertDialog alertDialog = new AlertDialog.Builder(getContext()).create();
                    alertDialog.setTitle("Error");
                    alertDialog.setMessage("Check your connection! If, problem persists please email svhsdev@vigoschools.org!");
                    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                }
                            });
                    alertDialog.show();
                }

            });


            RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(getContext());
            recyclerview.setLayoutManager(layoutmanager);
            recyclerview.setItemAnimator(new DefaultItemAnimator());
            recyclerview.setAdapter(recycler);

        }
        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }
        @Override
        public void onCancelled(DatabaseError error) {
            AlertDialog alertDialog = new AlertDialog.Builder(getContext()).create();
            alertDialog.setTitle("Error");
            alertDialog.setMessage("Check your connection! If, problem persists please email svhsdev@vigoschools.org!");
            alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
            alertDialog.show();
        }

    });
    return view;
}

Вот код для моего адаптера утилизатора:

public class adapter_user_remove_class extends RecyclerView.Adapter<adapter_user_remove_class.MyHolder>{

List<Listdata> listdata;

public adapter_user_remove_class(List<Listdata> listdata) {
    this.listdata = listdata;
}

@Override
public adapter_user_remove_class.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_class_model,parent,false);

    adapter_user_remove_class.MyHolder myHolder = new adapter_user_remove_class.MyHolder(view);
    return myHolder;
}


public void onBindViewHolder(adapter_user_remove_class.MyHolder holder, final int position) {

    final Listdata data = listdata.get(position);
    holder.vdate_class.setText(data.getDate_class());
    holder.vteacher.setText(data.getTeacher());
    holder.vrnumber.setText(data.getRnumber());
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick( final View view) {
            Context context = view.getContext();
            Intent intent = new Intent(context, user_remove_class.class);
            intent.putExtra("date_class", listdata.get(position).getDate_class());
             intent.putExtra("teacher", listdata.get(position).getTeacher());
             intent.putExtra("room_number", listdata.get(position).getRnumber());
            intent.putExtra("post_key", listdata.get(position).getUid());
            context.startActivity(intent);
        }
    });

}

@Override
public int getItemCount() {
    return listdata.size();
}


class MyHolder extends RecyclerView.ViewHolder{
    TextView vdate_class , vteacher,vrnumber;

    public MyHolder(View itemView) {
        super(itemView);
        vdate_class = (TextView) itemView.findViewById(R.id.date_class_name);
        vteacher = (TextView) itemView.findViewById(R.id.teacher);
        vrnumber = (TextView) itemView.findViewById(R.id.room_number);

    }
  }

}

Вот код операции, которая показывает детали и обрабатывает удаление данных из Firebase:

public class user_remove_class extends AppCompatActivity {
private Button remove_class;
private FirebaseDatabase database;
private DatabaseReference myRef, myRef2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_remove_class);
    final String date_class2 = getIntent().getStringExtra("date_class");
    final String teacher = getIntent().getStringExtra("teacher");
    final String room_number = getIntent().getStringExtra("room_number");
    final String post_key = getIntent().getStringExtra("post_key");
    TextView display_class_name = (TextView) findViewById(R.id.date_tv);
    display_class_name.setText(date_class2);
    TextView display_teacher = (TextView) findViewById(R.id.teacher_tv);
    display_teacher.setText(teacher);
    TextView display_room_number = (TextView) findViewById(R.id.rn_tv);
    display_room_number.setText(room_number);
    database = FirebaseDatabase.getInstance();
    myRef = database.getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Classes");

    remove_class = (Button) findViewById(R.id.add_class_2);
  //  final Query query = myRef.orderByChild("classes").equalTo(post_key);
    //System.out.println(query);
    remove_class.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            myRef = database.getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Classes");
        }
    });
 }
}

1 Ответ

0 голосов
/ 29 июня 2019

Вы можете удалить его:

  remove_class.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myRef = database.getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Classes").child(post_key);
myRef.removeValue();
            }
        });

Вы можете получить Случайный ключ этим методом.

MyRef.orderByChild("email").equalTo("blabla@blabla.com").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot child: dataSnapshot.getChildren()) {
            Log.d("User key", child.getKey());
            Log.d("User ref", child.getRef().toString());
            Log.d("User val", child.getValue().toString());
        }
    }

Обратите внимание, что вы должны передать письмо методом putExtra, а затем сопоставить его с методом equalTo();.Если электронная почта выходит из случайного ключа, она просто получит ключ быстрого доступа.:)

Надеюсь, это сработает.Если это работает, не забудьте принять вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...