簡體   English   中英

在recyclerview中選擇項目后,如何從Firebase中刪除值?

[英]How to remove values from Firebase when item is selected in recyclerview?

我的應用程序在recylerview中顯示用戶的類。 當用戶選擇一個特定的類時,它將打開另一個顯示詳細信息的活動,並且有一個用戶可以刪除該類的按鈕。 當單擊該按鈕時,我希望刪除用戶的類列表下保存的類的ID。 我也希望將用戶的uid從班級下的學生列表中刪除,而且我不小心將我的班級ID保存為變量名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");
        }
    });
 }
}

您可以通過以下方式將其刪除:

  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();匹配equalTo(); 方法 。 如果電子郵件在隨機密鑰中退出,它將簡單地檢索隨機密鑰。 :)

希望它能工作。 如果可行,別忘了接受問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM