Incapaz de mostrar mensagens do banco de dados em tempo real firebase para recyclerview

Ravi Malik:

Eu estou tentando criar um aplicativo de mensagens. Até agora o meu código funcionou bem, mas agora eu estou enfrentando um erro ao enviar mensagens para o usuário quando tento enviar uma mensagem de um usuário para outro minhas mensagens ficar atualizado no banco de dados em tempo real, mas ele não mostra no RecyclerView. Mas quando eu já não tem nenhuma mensagem em meu banco de dados Ele funciona muito bem, mas depois de clicar em enviar meu aplicativo trava.

imagem do banco de dados

Ele mostra erro na seguinte linha

               if (chat.getReciver().equals(myid) && chat.getSender().equals(userid)||
                    chat.getReciver().equals(userid)&&chat.getSender().equals(myid)){
                mChat.add(chat);
            }

E o erro que eu recebo na janela logcat é

Java.lang.NullPointerException: Tentativa de chamar o método virtual 'java.lang.String.equals booleanos (java.lang.Object)' em uma referência nula objeto em com.shivam.chatapp2.MessageActivity $ 4.onDataChange (MessageActivity.java:148 )

Meu código completo

MessageActivity.java

    public class MessageActivity extends AppCompatActivity {
    CircleImageView profile_image;
    TextView user_name;

    FirebaseFirestore fstore;
    FirebaseAuth fAuth;
    FirebaseUser fuser;
    DatabaseReference reference;

    Toolbar toolbar;
    ImageButton imageButton;
    EditText textsend;
    String userID;

    MessageAdapter messageAdapter;
    List<Chat> mChat;
    RecyclerView recyclerView;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message);

        fAuth=FirebaseAuth.getInstance();
        fstore=FirebaseFirestore.getInstance();
        userID = fAuth.getCurrentUser().getUid();


        profile_image=findViewById(R.id.profile_image);
        user_name=findViewById(R.id.username);
        imageButton=findViewById(R.id.btn_send);
        textsend=findViewById(R.id.text_send);

        recyclerView=findViewById(R.id.recycler_view2);
        recyclerView.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager= new LinearLayoutManager(getApplicationContext());
        linearLayoutManager.setStackFromEnd(true);
        recyclerView.setLayoutManager(linearLayoutManager);

        toolbar=findViewById(R.id.myToolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        Intent intent=getIntent();
        fuser=FirebaseAuth.getInstance().getCurrentUser();

        String userid=intent.getStringExtra("userid");
        String username= intent.getStringExtra("UserName");
        reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);
                user_name.setText(user.getFirst());

                readMessages(fuser.getUid(), userid);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String msg=textsend.getText().toString();
                if (!msg.equals("")){
                    sendMessage(fuser.getUid(),userid,msg);
                }
                else {
                    Toast.makeText(MessageActivity.this,"Empty messages cant be send",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

    private void sendMessage(String sender, final String receiver, String message) {

        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("sender", sender);
        hashMap.put("receiver", receiver);
        hashMap.put("message", message);

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
        reference.child("Chats").push().setValue(hashMap);

    }
    private void readMessages(String myid,String userid){
        mChat=new ArrayList<>();
        reference=FirebaseDatabase.getInstance().getReference("Chats");

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                mChat.clear();
                for (DataSnapshot snapshot:dataSnapshot.getChildren()) {
                    Chat chat=snapshot.getValue(Chat.class);
                    assert chat != null;
                    if (chat.getReciver().equals(myid) && chat.getSender().equals(userid)||
                            chat.getReciver().equals(userid)&&chat.getSender().equals(myid)){
                        mChat.add(chat);
                    }
                    messageAdapter=new MessageAdapter(MessageActivity.this,mChat);
                    recyclerView.setAdapter(messageAdapter);

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
}

MessageAdapter.java

public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {

    public static  final int MSG_TYPE_LEFT = 0;
    public static  final int MSG_TYPE_RIGHT = 1;

    private Context mContext;
    private List<Chat> mChat;

    FirebaseUser fuser;

    public MessageAdapter() {
    }

    public MessageAdapter(Context mContext, List<Chat> mChat) {
        this.mContext = mContext;
        this.mChat = mChat;

    }

    @NonNull
    @Override
    public MessageAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == MSG_TYPE_RIGHT) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_right, parent, false);

            return new MessageAdapter.ViewHolder(view);
        }
        else {
            View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_left, parent, false);

            return new MessageAdapter.ViewHolder(view);

        }
    }

    @Override
    public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder holder, int position) {

        Chat chat=mChat.get(position);
        holder.show_message.setText(chat.getMessage());




    }

    @Override
    public int getItemCount() {
        return mChat.size();
        }
    public class ViewHolder extends RecyclerView.ViewHolder{

         public TextView show_message;
         //public ImageView profile_image;

        public ViewHolder(@NonNull View itemView) {
        super(itemView);
        show_message=itemView.findViewById(R.id.username);
        //profile_image=itemView.findViewById(R.id.profile_image);

        }
    }

    @Override
    public int getItemViewType(int position) {
        fuser= FirebaseAuth.getInstance().getCurrentUser();
        if (mChat.get(position).getSender().equals(fuser.getUid())){
            return MSG_TYPE_RIGHT;
        }
        else {
            return MSG_TYPE_LEFT;
        }
    }
}

Chat.java

public class Chat {
    private String sender;
    private String reciver;
    private  String message;

    public Chat(String sender, String reciver, String message) {
        this.sender = sender;
        this.reciver = reciver;
        this.message = message;
    }

    public Chat() {
    }

    public String getSender() {
        return sender;
    }

    public void setSender(String sender) {
        this.sender = sender;
    }

    public String getReciver() {
        return reciver;
    }

    public void setReciver(String reciver) {
        this.reciver = reciver;
    }

    public String getMessage() {
        return message;
    }
Alex Mamo:

O problema no seu código é a reciverpropriedade em sua Chatclasse. Esta propriedade deve ser nomeado receiver, uma vez que está na sua base de dados:

digite descrição da imagem aqui

Então, para resolver isso, altere a sua Chatclasse para:

public class Chat {
    private String sender;
    private String receiver;
    private String message;

    public Chat(String sender, String receiver, String message) {
        this.sender = sender;
        this.receiver = receiver;
        this.message = message;
    }

    public Chat() {
    }

    public String getSender() {
        return sender;
    }

    public void setSender(String sender) {
        this.sender = sender;
    }

    public String getReceiver() {
        return receiver;
    }

    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }

    public String getMessage() {
        return message;
    }
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=349769&siteId=1
Recomendado
Clasificación