Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase Recyclerview不显示数据_Java_Android_Firebase_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Java Firebase Recyclerview不显示数据

Java Firebase Recyclerview不显示数据,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在尝试从数据库中获取数据,以显示在RecyclerView中。然而,它似乎不起作用。我的代码确实成功地填充了正确数量的行项目,但是没有检索到数据 活动: public class Chat extends AppCompatActivity { String username; public RecyclerView recyclerView; private DatabaseReference databaseReference; Context

我正在尝试从数据库中获取数据,以显示在
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);
        }
    }

}

同样,当使用正确数量的行项目填充
RecyclerView
时,显然有些东西正在工作。但是,没有检索到任何数据。当尝试获取用户名时,toast返回null


非常感谢您的帮助。

在您的模型类中,您更改了getter和setter默认(生成)名称,Firebase使用它们来序列化/反序列化对象。因此,您的模型应该是:

public class Msg {

    public Msg(){

    }
    public Msg(String user, String msg) {
        this.user = user;
        this.msg = msg;
    }

    private String user, msg;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String message) {
        this.msg = message;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String username) {
        this.user = username;
    }
}
通过使用
setUsername
(以及其他变体),firebase将尝试查找名为
username
的属性,但找不到它,这与
消息
相同。这就是为什么您有正确数量的对象(Firebase能够初始化您的对象,因为您正确地提供了一个空构造函数),但它们没有任何内容(属性为null),因为setter和getter与属性名称不匹配

您的属性是
user
msg
,因此setter和getter应该反映:
setUser
getUser
setMsg
getMsg

public class Msg {

    public Msg(){

    }
    public Msg(String user, String msg) {
        this.user = user;
        this.msg = msg;
    }

    private String user, msg;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String message) {
        this.msg = message;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String username) {
        this.user = username;
    }
}