从 UI 和 Firebase 实时数据库中删除 CardView 数据?

Posted

技术标签:

【中文标题】从 UI 和 Firebase 实时数据库中删除 CardView 数据?【英文标题】:Deleting CardView Data from UI and Firebase Realtime Database? 【发布时间】:2021-11-02 01:04:33 【问题描述】:

我有一个 RecyclerViewCardViews,它们来自我的 Firebase 实时数据库,用于不同的活动,例如日常用餐。我向CardView 添加了一个删除按钮,我想实现从 UI 和数据库功能中删除。我知道如何分别执行这两项操作,但我不确定在从 UI 中删除 CardView 后如何更新数据库。

目前,它正在从 UI 中删除,而不是从数据库中删除,所以当我回到 activity 时,卡片会重新出现。每顿饭都有自己的随机 ID,不确定这是否会有所不同,但认为这很重要。

适配器删除功能:

    foodHolder.deleteMeal.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            meals.remove(position);
            notifyDataSetChanged();
        
    );

进餐活动(设置适配器的位置):

mealRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() 

        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) 
            if (task.isSuccessful()) 
                int total = 0;
                for (DataSnapshot mealSnapshot : task.getResult().getChildren()) 
                    String grams = mealSnapshot.child("grams").getValue(String.class);

                    if (grams == null) 
                        textViewFoodCounter.setText("0");
                     else 
                        total += Integer.parseInt(grams);
                        textViewFoodCounter.setText(String.valueOf(total));
                    

                    if (meals != null) 
                        noMealsImg.setVisibility(View.GONE);
                        noMealsText.setVisibility(View.GONE);
                     else 
                        noMealsImg.setVisibility(View.VISIBLE);
                        noMealsText.setVisibility(View.VISIBLE);
                    

                    progressBar.setMax(1000); // make dynamic
                    ObjectAnimator.ofInt(progressBar, "progress", Integer.parseInt(grams))
                            .setDuration(300)
                            .start();

                    Meal data = mealSnapshot.getValue(Meal.class);
                    meals.add(data);
                

                foodAdapter = new FoodAdapter(meals);
                foodRecyclerView.setAdapter(foodAdapter);
             else 
                Log.d("TAG", task.getException().getMessage());
            
        
    );

卡片视图:

Firebase 膳食层次结构:

【问题讨论】:

如果您考虑在某个时间点尝试使用Cloud Firestore,这里有一些有用的文章可能会有所帮助。 How to delete a record from Firestore on a RecylerView left/right swipe 和 How to delete multiple records from Firestore using RecyclerView multi-selection. 谢谢@AlexMamo,是的,我最终遵循了 YouTube 上的教程,将我的 RecyclerView 转换为 FirebaseRecyclerView 和实施者滑动删除以及单击按钮 :) 非常复杂,但最终到达了那里! 很高兴听到这个消息。如果您找到了解决方案,您可能会考虑回答您自己的问题。所以未来的开发者可以从中受益。 我会的,好主意!今天某个时候会这样做:) 【参考方案1】:

你可以做这样的事情。如果 firebase 数据库中有任何更新,您可以使用 addValueEventListener 和 onDataChange 加载新数据。

    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance().reference;
    DatabaseReference dmoRef = firebaseDatabase.getReference().child(serialId);

    dmoRef.addValueEventListener(new ValueEventListener() 

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
            if (dataSnapshot.exists()) 

                
            
           //get your updated data


            

        

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) 
            Toast.makeText(getApplicationContext(), "Error fetching data", Toast.LENGTH_LONG).show();
        
    );

【讨论】:

感谢您的回复,我的问题是它没有从数据库中删除,只有 UI ..我不知道如何通过适配器从数据库中删除.. 您没有从 firebase 数据库中删除。 onclick 您的视图持有者删除按钮获取唯一的 ID 或名称。然后你可以这样做。 ` val mRealtimeDatabaseRoot = FirebaseDatabase.getInstance().reference mRealtimeDatabaseRoot.child(uniqueID).removeValue() ` 我不知道如何从活动中删除它。我无法在我的适配器类中获取我的数据库引用来使用删除按钮。如果这有意义吗? @Anwarchowdhury 从你想发送的地方添加这个,在视图持有者 -- (view.context as MyActivity).deleteMeal(uniqueId) 在activity中接收并删除数据,在activity中添加这个——fun deleteMeal(uniqueId: String) val mRealtimeDatabaseRoot = FirebaseDatabase.getInstance().reference mRealtimeDatabaseRoot.child(uniqueID).removeValue( )

以上是关于从 UI 和 Firebase 实时数据库中删除 CardView 数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从firebase实时数据库中删除?

当从实时数据库中删除对象时,Firebase 函数(用 NodeJS 编写)从 Cloud Storage 中删除文件

Flutter - 从特定值中删除数据,Firebase 实时数据库 [重复]

使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点

如何在 firebase 实时数据库中删除我的数据?

从 Firebase 数据库中删除值