无法将java.lang.String类型的对象转换为User

时间:2017-08-16 18:33:01

标签: android firebase firebase-realtime-database

databaseQuestion = FirebaseDatabase.getInstance().getReference("users").child(KrgDOh_GnwpIons_r9Q);
        databaseQuestion.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
//                System.out.println("VAL"+dataSnapshot.getValue());
                //clearing the previous artist list
                usersQuestions.clear();
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    //iterating through all the nodes

                    //getting artist
                   System.out.println("VAL"+postSnapshot.getValue());
                    User user = postSnapshot.getValue(User.class);
                    //adding artist to the list
                   usersQuestions.add(user);
                }




                //creating adapter
                QuestionUserList userQuestionsAdapter = new QuestionUserList(getActivity(), usersQuestions);
                //attaching adapter to the listview
               questionsList.setAdapter(userQuestionsAdapter);
        }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我遇到以下错误   com.google.firebase.database.DatabaseException:无法将java.lang.String类型的对象转换为类型

我想获取数据并在Listview中显示它。请帮忙。

2 个答案:

答案 0 :(得分:0)

假设users节点是Firebase root的直接子节点,要获取这些值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            String question = ds.child("question").getValue(String.class);
            String userId = ds.child("userId").getValue(String.class);
            Log.d("TAG", address + " / " + question + " / " + userId);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);

拥有这些值后,您可以创建类的新对象,将其添加到questionsList列表中。也不要忘记在onDataChange()方法中声明该列表,否则它将为null。

希望能有所帮助。

答案 1 :(得分:0)

在用户类

中创建默认构造函数
    public User(){
    //default cons.
}

并为每个变量生成getter和setter。