2017-10-09 19 views
1

Firebaseに基づいて評価バーに評価を表示する方法は? Firebaseにその評価を正常にアップロードしました。Firebaseの評価バーに評価を表示するには?

以下のコードは、評価バーに基づく評価を、successullyで動作するFirebaseにアップロードした方法を示しています。

ratingRef.child("Rating").setValue(ratingstar); 
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
    @Override 
    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
     Toast.makeText(UploadReviewAndRating.this, "Stars: " + (int)rating, Toast.LENGTH_SHORT).show(); 
    } 
}); 

Intent intent = new Intent(UploadReviewAndRating.this, ViewProfile.class); 
startActivity(intent); 

以下のコードは、動作しない評価バーを表示する方法を示しています。私はアプリを実行すると、アプリケーションがクラッシュして表示エラー:onRatingChanged()が呼び出されると

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference.

ratingRef.child("Ratings").addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     int rating = dataSnapshot.getValue(int.class); 
     ratingBar.setRating(rating); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
+0

[NullPointerExceptionがある何を、どのように私はそれを修正しますか?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – Grimthorr

+0

私は小切手を持っていて、依然としてwokはありません。可能であれば、火災ベースに基づいて定格率バーに定格を表示する例を表示できますか?それは役に立ちます – Hakiim

+0

'onDataChange'の' dataSnapshot'が 'null'でないことをチェックしてから、それを使う必要があります。また、 '.child(" Rating ")'を使用して保存してから、 '.child(" Ratings ")'をロードする方法もあります。 – Grimthorr

答えて

1

あなたratingRefを使用してデータベースに結果を保存する必要があります。

ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
    @Override 
    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
     if (fromUser) ratingRef.child("Rating").setValue(rating); 
    } 
}); 

そしてまた、データベース(dataSnapshot)から返された結果がnullではないことを確認しながら、評価をロードするために、同じratingRef子にリスナーを添付します。

ratingRef.child("Rating").addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot != null && dataSnapshot.getValue() != null) { 
      float rating = Float.parseFloat(dataSnapshot.getValue().toString()); 
      ratingBar.setRating(rating); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { } 
}); 
+0

返信ありがとうございますと私は遅刻の更新のために申し訳ありません。私は後で試してみる。 – Hakiim

+0

そのメソッドは 'valueOf(java.lang.Object)'メソッドを解決できないと言っていますか? – Hakiim

+0

ああ、申し訳ありません: 'int rating = dataSnapshot.getValue(Integer.class);' – Grimthorr

関連する問題