com.google.firebase.database.DatabaseException: невозможно преобразовать объект типа java.lang.String в тип ...
и еще одна ошибка. Адаптер не подключен;Пропуск макета - Но, похоже, это не критическая ошибка ///// Пожалуйста, помогите, я новичок в программировании, и этот проект очень важен для меня./////
Моя MessageActivity
public class MessageActivity extends AppCompatActivity {
CircleImageView ivProfileImage;
TextView tvUsername;
ImageButton btnSend;
EditText text_send;
MessageAdapter messageAdapter;
List<Chat> mChat;
FirebaseUser firebaseUser;
DatabaseReference databaseReference;
RecyclerView recycler_view;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
recycler_view = findViewById(R.id.recycler_view);
recycler_view.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
linearLayoutManager.setStackFromEnd(true);
recycler_view.setLayoutManager(linearLayoutManager);
ivProfileImage = findViewById(R.id.ivProfileImage);
tvUsername = findViewById(R.id.tvUsername);
btnSend = findViewById(R.id.btnSend);
text_send = findViewById(R.id.text_send);
intent = getIntent();
final String userid = intent.getStringExtra("userid");
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = text_send.getText().toString();
if(!msg.equals("")){
sendMessage(firebaseUser.getUid(), userid, msg);
}else {
Toast.makeText(MessageActivity.this, "You can`t sand empty message", Toast.LENGTH_SHORT).show();
}
text_send.setText("");
}
});
databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
tvUsername.setText(user.getUsername());
if(user.getImageURL().equals("default")){
ivProfileImage.setImageResource(R.mipmap.ic_launcher);
}else{
Glide.with(MessageActivity.this).load(user.getImageURL()).into(ivProfileImage);
}
readMessage(firebaseUser.getUid(), userid, user.getImageURL());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
public void sendMessage(String sender, String receiver, String message){
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
HashMap<String, Object>hashMap = new HashMap<>();
hashMap.put("sender", sender);
hashMap.put("receiver", receiver);
hashMap.put("message", message);
databaseReference.child("Chats").push().setValue(hashMap);
}
private void readMessage(final String myid, final String userid, final String imageurl){
mChat = new ArrayList<>();
databaseReference = FirebaseDatabase.getInstance().getReference("Chats");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mChat.clear();
for(DataSnapshot snapshot:dataSnapshot.getChildren()){
Chat chat = snapshot.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, imageurl);
recycler_view.setAdapter(messageAdapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
Мой MessageAdapter
открытый класс MessageAdapter расширяет RecyclerView.Adapter {
public static final int MSG_TYPE_LEFT = 0;
public static final int MSG_TYPE_RiGHT = 1;
private Context mContext;
private List<Chat> mChat;
private String imageUrl;
FirebaseUser firebaseUser;
public MessageAdapter (Context mContext, List<Chat> mChat, String imageUrl){
this.mChat = mChat;
this.mContext = mContext;
this.imageUrl = imageUrl;
}
@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.showMessage.setText(chat.getMessage());
if(imageUrl.equals("default")){
holder.ivProfileImage.setImageResource(R.mipmap.ic_launcher);
}else{
Glide.with(mContext).load(imageUrl).into(holder.ivProfileImage);
}
}
@Override
public int getItemCount() {
return mChat.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView showMessage;
public ImageView ivProfileImage;
public ViewHolder(View itemView) {
super(itemView);
showMessage = itemView.findViewById(R.id.showMessage);
ivProfileImage = itemView.findViewById(R.id.ivProfileImage);
}
}
@Override
public int getItemViewType(int position) {
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if(mChat.get(position).getSender().equals(firebaseUser.getUid())){
return MSG_TYPE_RiGHT;
}else {
return MSG_TYPE_LEFT;
}
}
}
моя модель
пакет com.example.yaryk.skymessage.Model;
общедоступный класс чата {
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;
}
public void setMessage(String message) {
this.message = message;
}
}
структура базы данных