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)