有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java浮点在datasnapshot循环中返回null

我试图从Firebase检索评级数据,以计算rating bar的平均值。下面是检索数据的代码

DatabaseReference ratingRef = FirebaseDatabase.getInstance().getReference("Rating");

ratingRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        double count = 0;
        for(DataSnapshot ds : snapshot.getChildren()) {
            //Toast.makeText(RibsAndPowerboats.this, "it is "+ds, Toast.LENGTH_SHORT).show();
            double rating = Double.parseDouble(ds.child(RandomID).child("rating").getValue().toString());
            count = count + rating;
        }
        double avarage = count / snapshot.getChildrenCount();
        if (avarage == 0) {
            ratingBar.setRating(avarage);
        } else {
            Toast.makeText(RibsAndPowerboats.this, "it is" + avarage, Toast.LENGTH_SHORT).show();

        }

    }

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

以下是提交活动:

String RandomID = getIntent().getStringExtra("RandomID");

if (RandomID != null){

    String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Rating");

    SubmitScore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            float RatedValue = ratingBar.getRating();
            databaseReference.child(RandomID).child(userId).child("rating").setValue(RatedValue);
            String SaveReview = AddReview.getText().toString();
            String ScoreStrg = Float.toString(RatedValue);
            Score.setText(ScoreStrg+" out of 5");
            databaseReference.child(RandomID).child(userId).child("review").setValue(SaveReview);
            Toast.makeText(SubmitRating.this, "Ευχαριστούμε!", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(SubmitRating.this, RibsAndPowerboats.class);
            startActivity(intent);
            finish();
        }
    });
}

这是我的firebase数据库:

"Rating" : {
    "3086181c-c391-4bab-a022-0a0e0bb2624c" : {
      "Xqve54QUwwPo3NyZhcs2z4wkETB2" : {
        "rating" : 4,
        "review" : "Βδησηαησησσησησ"
      }
    }
  }

我试图将变量从double改为float和long,但没有任何变化。有什么问题?显示的错误是:

Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference


共 (1) 个答案

  1. # 1 楼答案

    为了能够在所有用户对象中获取“rating”属性的值,请使用以下代码行:

    String randomId = "3086181c-c391-4bab-a022-0a0e0bb2624c";
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference randomIdRef = rootRef.child("Rating").child(randomId);
    randomIdRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            if (task.isSuccessful()) {
                for (DataSnapshot snapshot : task.getResult().getChildren()) {
                    String rating = snapshot.child("rating").getValue(String.class);
                    Log.d("TAG", "rating:" + rating);
                }
            } else {
                Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
            }
        }
    });
    

    logcat中的结果将是每个用户对象下存在的rating属性的所有值