-1
public class MessageActivity extends AppCompatActivity {

    TextView username;
    ImageView imageView;
    RecyclerView recyclerViewy;
    EditText msg_editText;
    ImageButton sendBtn;


    FirebaseUser fuser;
    DatabaseReference references;
    Intent intent;

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


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

        imageView = findViewById(R.id.imageview_profile);
        username = findViewById(R.id.usernamey);
        sendBtn = findViewById(R.id.btn_send);
        msg_editText = findViewById(R.id.text_send);
        recyclerView = findViewById(R.id.recycler_view);




        recyclerView.setHasFixedSize(true);


        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
        linearLayoutManager.setStackFromEnd(true);
        recyclerView.setLayoutManager(linearLayoutManager);


        intent = getIntent();
        String userid = intent.getStringExtra("userid");

        fuser = FirebaseAuth.getInstance().getCurrentUser();
        references = FirebaseDatabase.getInstance().getReference("MyUsers").child(userid);

        references.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Users users = snapshot.getValue(Users.class);
                username.setText(users.getUsername());

                if (users.getImageURL().equals("default")){
                    imageView.setImageResource(R.mipmap.ic_launcher);

                }else {
                    Glide.with(MessageActivity.this)
                            .load(users.getImageURL())
                            .into(imageView);
                }


                readMessages(fuser.getUid(),userid,users.getImageURL());

            }

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

            }
        });

        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String msg = msg_editText.getText().toString();

                if (!msg .equals("")){
                    sendMessage(fuser.getUid(),userid,msg);
                }else {
                    Toast.makeText(MessageActivity.this, "please send a non empty message !", Toast.LENGTH_SHORT).show();
                }
                msg_editText.setText("");


            }
        });




    }

     private void sendMessage(String sender,String receiver ,String message){
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

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

        reference.child("Chats").push().setValue(hashMap);
    }


     private void readMessages(String myid,String userid,String imgurl){
       mchat = new ArrayList<>();
       references = FirebaseDatabase.getInstance().getReference("Chats");

       references.addValueEventListener(new ValueEventListener() {
           @Override
           public void onDataChange(@NonNull DataSnapshot snapshot) {
               mchat.clear();
               for (DataSnapshot dataSnapshot :snapshot.getChildren()){

                   Chat chat = dataSnapshot.getValue(Chat.class);

                   if (chat.getReceiver().equals(myid)&&chat.getSender().equals(userid)&&chat.getReceiver().equals(userid)&&chat.getSender().equals(myid)){
                       mchat.add(chat);
                   }
                   messageAdapter = new MessageAdapter(MessageActivity.this,mchat,imgurl);
                   recyclerView.setAdapter(messageAdapter);
               }

           }

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

           }
       });


    }
   }

error

E/RecyclerView: No adapter attached; skipping layout
W/ClassMapper: No setter/field for recevier found on class com.example.hossam.Model.Chat
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.hossam, PID: 13460
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at com.example.hossam.MessageActivity$3.onDataChange(MessageActivity.java:150)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
273K
  • 29,503
  • 10
  • 41
  • 64
hossam
  • 11
  • 1

1 Answers1

0

It looks like users.getImageURL() is returning null for one or more of your nodes. If this is indeed a common occurrence in your database, you can easily detect by using so-called Yoda-notation for your check:

if ("default".equals(users.getImageURL())){
  ...

Since "default" can never be null, this type of check will never fail with a NullPointerException.

Note that NullPointerExceptions are incredibly common, so I recommend learning how to debug them yourself by reading What is a NullPointerException, and how do I fix it?

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807