No se pueden mostrar mensajes desde la base de datos en tiempo real a base de fuego en recyclerview

Ravi Malik:

Estoy tratando de crear una aplicación de mensajería. Hasta ahora mi código funcionaba bien, pero ahora estoy frente a un error al enviar mensajes al usuario cuando intento enviar un mensaje de un usuario a otro mis mensajes se actualizan en la base de datos en tiempo real, pero no aparece en el RecyclerView. Pero cuando lo anteriormente no tengo ningún mensaje en mi base de datos que funciona bien, pero después de hacer clic en el envío de mis aplicación se bloquea.

base de datos de pantalla

Muestra error en línea siguiente

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

Y el error que me sale en la ventana es Logcat

java.lang.NullPointerException: intento de invocar método virtual 'java.lang.String.equals booleanos (java.lang.Object)' en una referencia de objeto nulo en com.shivam.chatapp2.MessageActivity $ 4.onDataChange (MessageActivity.java:148 )

Mi 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 :

El problema en su código es la reciverpropiedad en su Chatclase. Esta propiedad debe ser nombrado receiver, como lo es en su base de datos:

introducir descripción de la imagen aquí

Así que para resolver esto, por favor cambiar su Chatclase a:

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;
    }
}

Supongo que te gusta

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