Как удалить сообщения из базы данных Firebase? - PullRequest
0 голосов
/ 17 ноября 2018

Я создаю приложение для чата. Я хочу, чтобы пользователи могли удалять чаты и сообщения из базы данных Firebase. Ниже приведен код адаптера сообщений, который я пытался использовать для удаления сообщений, и он работает нормально, когда я долго нажимаю насообщение, но когда я снова захожу в приложение, сообщения возвращаются.Я использую базу данных firebase

package com.paddi.paddi.paddi;

import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.firebase.auth.FirebaseAuth;
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.ValueEventListener;
import com.squareup.picasso.Picasso;

import java.util.List;

import de.hdodenhof.circleimageview.CircleImageView;

/**
 * Created by paddi on 15/11/2017.
 */

public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageViewHolder>
{
    private List<Messages> userMessagesList;

    private FirebaseAuth mAuth;
    private DatabaseReference UsersDatabaseReference;







    public MessageAdapter(List<Messages> userMessagesList)
    {
        this.userMessagesList = userMessagesList;

    }


// I tried using this to delete the chats it works but every time i log into the app again the messages re-appear


    public void delete(int position){


        userMessagesList.remove(position);
        notifyItemRemoved(position);





    }




    @Override
    public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {

        View V = LayoutInflater.from(parent.getContext())
                                .inflate(R.layout.messages_layout_of_users, parent, false);


        mAuth = FirebaseAuth.getInstance();




        return new MessageViewHolder(V);



    }





    @Override
    public void onBindViewHolder(final MessageViewHolder holder, int position)
    {


        String message_sender_id = mAuth.getCurrentUser().getUid();
            Messages messages = userMessagesList.get(position);

        String fromUserId = messages.getFrom();
        String fromMessageType = messages.getType();

        UsersDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(fromUserId);
        UsersDatabaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            {
                String userName = dataSnapshot.child("user_name").getValue().toString();
                String userImage = dataSnapshot.child("user_thumb_image").getValue().toString();

                Picasso.with(holder.ReceiverProfileImage.getContext()).load(userImage)
                        .fit().centerInside().placeholder(R.drawable.default_profile).into(holder.ReceiverProfileImage);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


        if (fromMessageType.equals("text"))
        {
            holder.ReceiverMessageText.setVisibility(View.INVISIBLE);
            holder.messagePicture.setVisibility(View.INVISIBLE);
            holder.ReceiverProfileImage.setVisibility(View.INVISIBLE);
            holder.SenderMessageText.setVisibility(View.INVISIBLE);
            // You comment this last line out in case of any errors

            if (fromUserId.equals(message_sender_id))
            {
                // You comment this first line out in case of any errors
                holder.SenderMessageText.setVisibility(View.VISIBLE);
                holder.SenderMessageText.setBackgroundResource(R.drawable.sender_message_text_background);
                holder.SenderMessageText.setTextColor(Color.WHITE);
                holder.SenderMessageText.setGravity(Gravity.START);
                holder.SenderMessageText.setText(messages.getMessage());
            }

            else
            {

                holder.SenderMessageText.setVisibility(View.INVISIBLE);

                holder.ReceiverMessageText.setVisibility(View.VISIBLE);
                holder.ReceiverProfileImage.setVisibility(View.VISIBLE);
                holder.messagePicture.setVisibility(View.VISIBLE);

                holder.ReceiverMessageText.setBackgroundResource(R.drawable.receiver_message_text_background);
                holder.ReceiverMessageText.setTextColor(Color.WHITE);
                holder.ReceiverMessageText.setGravity(Gravity.START);
                holder.ReceiverMessageText.setText(messages.getMessage());
            }

           // holder.messageText.setText(messages.getMessage());
        }


    else
    {
          //  holder.messageText.setVisibility(View.INVISIBLE);
           // holder.messageText.setPadding(0,0,0,0);

//            holder.messagePicture.setForegroundGravity(22);
        Picasso.with(holder.ReceiverProfileImage.getContext()).load(messages.getMessage())
                .placeholder(R.drawable.default_profile).into(holder.messagePicture);
    }



}



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


public class MessageViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener
{
    public TextView SenderMessageText, ReceiverMessageText;
    public CircleImageView ReceiverProfileImage;
    public ImageView messagePicture;



    public MessageViewHolder(View view) {
        super(view);

        SenderMessageText = (TextView) itemView.findViewById(R.id.sender_message_text);
        ReceiverMessageText = (TextView) itemView.findViewById(R.id.receiver_message_text);
        messagePicture = (ImageView) view.findViewById(R.id.message_image_view);
        ReceiverProfileImage = (CircleImageView) view.findViewById(R.id.messages_profile_image);



        SenderMessageText.setOnLongClickListener(this);
        ReceiverMessageText.setOnLongClickListener(this);
        messagePicture.setOnLongClickListener(this);

    }


    @Override
    public boolean onLongClick(View v) {
        delete(getAdapterPosition());
        return true;

    }
}

}

Это скриншот моей базы данных для дерева сообщений: image

1 Ответ

0 голосов
/ 17 ноября 2018

Кажется, что это код, где вы удаляете сообщение:

public void delete(int position){
    userMessagesList.remove(position);
    notifyItemRemoved(position);
}

Это только удаляет сообщение из адаптера, но не из базы данных.Поэтому имеет смысл, что сообщение появляется снова при перезапуске приложения.

Чтобы окончательно удалить сообщение, вам также придется удалить его из базы данных.Поскольку вы не указали, как вы загружаете данные, сложно дать точный код.Но это будет что-то вроде:

FirebaseDatabase.getInstance().getReference("messages").child("key_of_message").removeValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...