Я пытаюсь получить данные из моей базы данных для отображения в RecyclerView
. Тем не менее, это не похоже на работу. Мой код успешно заполняет правильное количество элементов строки, однако данные не извлекаются.
АКТИВНОСТЬ:
public class Chat extends AppCompatActivity {
String username;
public RecyclerView recyclerView;
private DatabaseReference databaseReference;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat);
context = this;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
// Set up the input
final EditText input = new EditText(this);
// Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
builder.setView(input);
// Set up the buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
username = input.getText().toString();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
String key = getIntent().getStringExtra("Key");
Toast.makeText(this, key, Toast.LENGTH_LONG).show();
FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference roomRef = database.getReference("rooms/" + key);
databaseReference = database.getReference("rooms").child(key);
ImageButton sendText = findViewById(R.id.send);
final EditText msg = findViewById(R.id.msg);
sendText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference roomRef2 = roomRef.child(String.valueOf(System.currentTimeMillis()));
Map<String, String> strings = new HashMap<>();
strings.put("user", username);
strings.put("msg", msg.getText().toString());
roomRef2.setValue(strings);
}
});
//RECYCLER VIEW
recyclerView = findViewById(R.id.recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
FirebaseRecyclerAdapter<Msg,MsgViewHolder> adapter = new FirebaseRecyclerAdapter<Msg, MsgViewHolder>(
Msg.class, R.layout.row, MsgViewHolder.class,databaseReference
) {
@Override
protected void populateViewHolder(MsgViewHolder viewHolder, Msg model, int position) {
viewHolder.setUser(model.getUsername());
viewHolder.setMsg(model.getMessage());
Toast.makeText(context, model.getUsername(), Toast.LENGTH_LONG).show();
}
};
recyclerView.setAdapter(adapter);
}
public static class MsgViewHolder extends RecyclerView.ViewHolder {
TextView username, msg_;
public MsgViewHolder(View itemView) {
super(itemView);
username = itemView.findViewById(R.id.userTxt);
msg_ = itemView.findViewById(R.id.msgTxt);
}
public void setUser(String username) {
this.username.setText(username);
}
public void setMsg(String message) {
this.msg_.setText(message);
}
}
}
МОДЕЛЬ:
public class Msg {
public Msg(){
}
public Msg(String user, String msg) {
this.user = user;
this.msg = msg;
}
private String user, msg;
public String getMessage() {
return msg;
}
public void setMessage(String message) {
this.msg = message;
}
public String getUsername() {
return user;
}
public void setUsername(String username) {
this.user = username;
}
}
Опять же, очевидно, что что-то работает, так как RecyclerView
заполнен правильным количеством строк. Однако данные не извлекаются. Тост возвращает ноль при попытке получить имена пользователей.
Любая помощь очень ценится, спасибо.