Android 从回收器视图和firebase中删除行

Android 从回收器视图和firebase中删除行,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我试图从firebase中删除arow,当我在recycler视图中滑动时。我已经成功地从recycler视图中删除了该记录,但正在努力从firebase中删除它。以下是我当前使用的方法,deleteItem()方法(在getSnapshots()方法上,无法解析方法“getSnapshots()”)中的adpater中有一个错误 “我的活动”与“回收者”视图的“物品触摸”帮助器: protected void onCreate(Bundle savedInstanceState) {

我试图从firebase中删除arow,当我在recycler视图中滑动时。我已经成功地从recycler视图中删除了该记录,但正在努力从firebase中删除它。以下是我当前使用的方法,deleteItem()方法(在getSnapshots()方法上,无法解析方法“getSnapshots()”)中的adpater中有一个错误

“我的活动”与“回收者”视图的“物品触摸”帮助器:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_customer_profile);
 Log.d(TAG, "finding recyclerview");
        recyclerView = (RecyclerView) findViewById(R.id.myRecyclerBooking);
        recyclerView.setLayoutManager( new LinearLayoutManager(this));


        Log.d(TAG, "getting db reference");



        //FirebaseSearch https://www.youtube.com/watch?v=b_tz8kbFUsU
        reference = FirebaseDatabase.getInstance().getReference().child("Booking");
        Query firebaseSearchQuery = reference.orderByChild("customerID").equalTo(mAuth.getCurrentUser().getUid());

        firebaseSearchQuery.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Log.d(TAG, "populating recyclerview");

                list = new ArrayList<Booking>();
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    Booking b = dataSnapshot1.getValue(Booking.class);
                    list.add(b);
                }
                adapter = new MyAdapterBookings(CustomerProfile.this, list);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }


            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(CustomerProfile.this, "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
            }
        });
}

ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this);
        new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);



        ItemTouchHelper.SimpleCallback itemTouchHelperCallback1 = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                return false;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
                // Row is swiped from recycler view
                // remove it from adapter
            }

            @Override
            public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
            }
        };

        // attaching the touch helper to recycler view
        new ItemTouchHelper(itemTouchHelperCallback1).attachToRecyclerView(recyclerView);
    }

@Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position) {

        if (viewHolder instanceof MyAdapterBookings.MyViewHolder) {
            // get the removed item name to display it in snack bar
            String name = list.get(viewHolder.getAdapterPosition()).getMuaName();

            // backup of removed item for undo purpose
            final Booking deletedItem = list.get(viewHolder.getAdapterPosition());
            final int deletedIndex = viewHolder.getAdapterPosition();

            // remove the item from recycler view
            adapter.removeItem(viewHolder.getAdapterPosition());
            adapter.deleteItem(viewHolder.getAdapterPosition());


            // showing snack bar with Undo option
            Snackbar snackbar = Snackbar
                    .make(coordinatorLayout, "Appointment with " + name + " cancelled!", Snackbar.LENGTH_LONG);
            snackbar.setAction("UNDO", new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    // undo is selected, restore the deleted item
                    adapter.restoreItem(deletedItem, deletedIndex);
                }
            });
            snackbar.setActionTextColor(Color.YELLOW);
            snackbar.show();
        }

    }
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u customer\u profile);
Log.d(标签“查找回收视图”);
recyclerView=(recyclerView)findViewById(R.id.myRecyclerBooking);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
Log.d(标记“获取数据库引用”);
//火基搜索https://www.youtube.com/watch?v=b_tz8kbFUsU
reference=FirebaseDatabase.getInstance().getReference().child(“预订”);
Query firebaseSearchQuery=reference.orderByChild(“customerID”).equalTo(mAuth.getCurrentUser().getUid());
firebaseSearchQuery.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
Log.d(标记“填充回收视图”);
列表=新的ArrayList();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
Booking b=dataSnapshot1.getValue(Booking.class);
列表.添加(b);
}
adapter=新的MyAdapterBookings(CustomerProfile.this,list);
recyclerView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Toast.makeText(CustomerProfile.this,“Opsss…有问题”,Toast.LENGTH\u SHORT.show();
}
});
}
ItemTouchHelper.SimpleCallback itemTouchHelperCallback=新的RecyclerItemTouchHelper(0,ItemTouchHelper.LEFT,此);
新建ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);
ItemTouchHelper.SimpleCallback itemTouchHelperCallback1=新建ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP){
@凌驾
公共布尔onMove(RecyclerView RecyclerView、RecyclerView.ViewHolder ViewHolder、RecyclerView.ViewHolder目标){
返回false;
}
@凌驾
公共空间(RecyclerView.ViewHolder ViewHolder,int方向){
//行从回收器视图中刷取
//将其从适配器上卸下
}
@凌驾
public void onChildraw(画布c、RecyclerView RecyclerView、RecyclerView.ViewHolder ViewHolder、float dX、float dY、int actionState、boolean isCurrentlyActive){
super.onchildraw(c、recyclerView、viewHolder、dX、dY、actionState、isCurrentlyActive);
}
};
//将触摸辅助对象附加到回收器视图
新建ItemTouchHelper(itemTouchHelperCallback1).attachToRecyclerView(recyclerView);
}
@凌驾
公共空间(RecyclerView.ViewHolder ViewHolder、int方向、int位置){
if(MyAdapterBookings.MyViewHolder的viewHolder实例){
//获取删除的项目名称以在快餐店中显示
String name=list.get(viewHolder.getAdapterPosition()).getMuaName();
//为撤消目的备份已删除的项目
final Booking deletedItem=list.get(viewHolder.getAdapterPosition());
final int deletedIndex=viewHolder.getAdapterPosition();
//从回收器视图中删除项目
adapter.removietem(viewHolder.getAdapterPosition());
deleteItem(viewHolder.getAdapterPosition());
//显示具有撤消选项的快餐店
Snackbar Snackbar=Snackbar
.make(coordinatorLayout,“+姓名+”取消的约会!”,Snackbar.LENGTH_LONG);
snackbar.setAction(“UNDO”,new View.OnClickListener()){
@凌驾
公共void onClick(视图){
//如果选择“撤消”,则恢复已删除的项目
adapter.restoreItem(deletedItem,deletedIndex);
}
});
snackbar.setActionTextColor(Color.YELLOW);
snackbar.show();
}
}
我的适配器:

import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;

public class MyAdapterBookings extends RecyclerView.Adapter<MyAdapterBookings.MyViewHolder> {

    Context context;
    ArrayList<Booking> bookings;
    DatabaseReference reference;
    private static final String TAG = "Bookings Adapter";
    public MyAdapterBookings(Context c , ArrayList<Booking> b)
    {
        context = c;
        bookings = b;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.bookingview,parent,false));
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.name.setText(bookings.get(position).getMuaName());
        holder.date.setText(bookings.get(position).getDate());
        holder.time.setText(bookings.get(position).getTime());
        holder.price.setText(bookings.get(position).getPrice());
        holder.location.setText(bookings.get(position).getLocation());

    }

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

    class MyViewHolder extends RecyclerView.ViewHolder
    {
        TextView name,date,time,price,location;
        public RelativeLayout viewBackground, viewForeground;
        public MyViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.name);
            date = (TextView) itemView.findViewById(R.id.date);
            time = (TextView) itemView.findViewById(R.id.time);
            price = (TextView) itemView.findViewById(R.id.price);
            location = (TextView) itemView.findViewById(R.id.location);

            viewBackground = itemView.findViewById(R.id.view_background);
            viewForeground = itemView.findViewById(R.id.view_foreground);



        }    }



    public void removeItem(int position) {
        bookings.remove(position);
        // notify the item removed by position
        // to perform recycler view delete animations
        // NOTE: don't call notifyDataSetChanged()
        notifyItemRemoved(position);


}


public void deleteItem(int position){

    getSnapshots().getSnapshot(position).getReference().delete();
}

public void restoreItem(Booking item, int position) {
        bookings.add(position, item);
        // notify item added by position
        notifyItemInserted(position);
    }



}
导入android.content.Context;
导入android.content.Intent;
导入android.os.Handler;
导入android.support.annotation.NonNull;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.Query;
导入com.google.firebase.database.ValueEventListener;
导入com.squareup.picasso.picasso;
导入java.util.ArrayList;
公共类MyAdapterBookings扩展了RecyclerView.Adapter{
语境;
ArrayList预订;
数据库参考;
私有静态最终字符串标记=“预订适配器”;
公共MyAdapterBookings(上下文c,数组列表b)
{
上下文=c;
预订=b;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int v
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
        //Booking b = dataSnapshot1.getValue(Booking.class);
        dataSnapshot1.getRef().removeValue();
    }
}
ArrayList<Booking> bookings;
ArrayList<String> keys;
public MyAdapterBookings(Context c , ArrayList<Booking> b, ArrayList<String> k)
{
    context = c;
    bookings = b;
    keys = k;
}
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    Log.d(TAG, "populating recyclerview");

    list = new ArrayList<Booking>();
    List<String> keys = new ArrayList<String>();
    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
        Booking b = dataSnapshot1.getValue(Booking.class);
        list.add(b);
        keys.add(dataSnapshot1.getKey());
    }
    adapter = new MyAdapterBookings(CustomerProfile.this, list, keys);
    recyclerView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}
public void deleteItem(int position){
    String key = keys.get(position);
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Booking");
    ref.child(key).removeValue();
}