Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
数据库异常-Can';t将java.lang.String类型的对象转换为com.appmaster.akash.messageplus.Results类型_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

数据库异常-Can';t将java.lang.String类型的对象转换为com.appmaster.akash.messageplus.Results类型

数据库异常-Can';t将java.lang.String类型的对象转换为com.appmaster.akash.messageplus.Results类型,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,错误 代码 数据库 Results.java private void fetchResults() { mDatabaseReference.child("Users").child(id).child("Quiz").child("Results").addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataS

错误

代码

数据库

Results.java

private void fetchResults() {
        mDatabaseReference.child("Users").child(id).child("Quiz").child("Results").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Results results = dataSnapshot.getValue(Results.class);
                resultsList.add(results);
                mAdapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                throw databaseError.toException();
            }
        });
    }
}
}

错误在数据库中,名称和值都未修复。喜欢它是根据用户决定的

保存数据

public class Results {
private String Name;
private String Score;

public Results() {
}

public Results(String Name, String Score) {
    this.Name = Name;
    this.Score = Score;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getScore() {
    return Score;
}

public void setScore(String score) {
    Score = score;
}
String name=receiversname;
HashMap userMap=新的HashMap();
userMap.put(name,String.valueOf(mScore));
mRef.child(“用户”).child(receiversid).child(“测验”).child(“结果”).setValue(userMap).addOnCompleteListener(新OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
意向意向=新意向(takingquick.this,TakingQuizDone.class);
intent.putExtra(“receiversid”,receiversid);
intent.putExtra(“Score”,mScore.toString());
星触觉(意向);
完成();
}
}
});

查看您的数据库结构,在
结果
节点下(如果我理解正确的话)似乎有一个节点,其名称对应于用户名,该节点的值对应于分数

关于您的
结果.java
类,您的数据库应按如下方式组织数据:

String name = RecieversName;
                HashMap<String, String> userMap = new HashMap<>();
                userMap.put(name, String.valueOf(mScore));
                mRef.child("Users").child(RecieversId).child("Quiz").child("Results").setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            Intent intent = new Intent(TakingQuiz.this, TakingQuizDone.class);
                            intent.putExtra("RecieversId",RecieversId);
                            intent.putExtra("Score", mScore.toString());
                            startActivity(intent);
                            finish();

                        }
                    }
                });

看起来您希望一次性处理
../results
下的所有结果。在这种情况下,您应该使用
ValueEventListener
而不是
ChildEventListener

此外,您的
结果
类与JSON数据结构不匹配。这意味着调用
getValue(Results.class)
时,Firebase无法将JSON的属性自动读入
Results
对象。相反,你必须自己进行转换

-Quiz
  -Question1
  -.......
  -Results
    -Name: "Akash"
    -Score: "5"

您的问题中包含了一个指向JSON树图片的链接。请将其替换为实际的JSON文本,您可以通过单击中的导出JSON链接轻松获取。将JSON作为文本使其可搜索,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。那么它将如何填充recyclerview?我不确定您的意思。您有一个适配器,然后在更改该适配器的数据集时调用
mAdapter.notifyDataSetChanged()
(我假设
resultsList
是)。我的适配器是否与数据库匹配。。。比如说这是正确的吗?我能不能用Akash:5来代替Akash分数5?是的,你可以,但是你必须遵循Frank在另一个答案中的建议。并停止使用结果类。
-Quiz
  -Question1
  -.......
  -Results
    -Name: "Akash"
    -Score: "5"
mDatabaseReference.child("Users").child(id).child("Quiz/Results").addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot resultSnapshot: dataSnapshot.getChildren()) {
        String user = resultSnapshot.getKey();
        String score = resultSnapshot.getValue(String.class);
        Results results = new Results(user, score);
        resultsList.add(results);
    }
    mAdapter.notifyDataSetChanged();
  } 

  @Override
  public void onCancelled(DatabaseError databaseError) {
      throw databaseError.toException();
  }
})