2017-03-17 128 views
0

我试图让从火力地堡的值。的Android火力地堡检索值

我用这一段代码来获取,但所有的方法,我呼吁score1返回null。

private void onSignedInInitialize(String username) { 
    mUsername = username; 
    final DatabaseReference reference = mFirebaseDatabase.getReference(); 
    Query query = reference.child("scores").orderByChild("username").equalTo(mUsername); 
    query.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      // Get Post object and use the values to update the UI 
      Score scores1 = dataSnapshot.getValue(Score.class); 
      Log.d(TAG, " scores1 " + scores1 + " datasnapshot to String " + dataSnapshot.getValue().toString()); 
      Log.d(TAG, " user " + scores1.getUsername()); 
      Log.d(TAG, " user " + scores1.getUsername()); 
      scoresTextView.setText(scores1.getScore()); 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

我的火力地堡结构看起来像this

我使用他们的文档(带后级)的例子,也搜索在谷歌,但我无法找到我怎么能得到的分数值。 谢谢你的回答。

这是分数级

public class Score { 

    private String username; 
    private String score; 

    public Score() { 

    } 

    public Score(String username, String score) { 
     this.username = username; 
     this.score = score; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public String getScore() { 
     return score; 
    } 

    public void setScore(String score) { 
     this.score = score; 
    } 

} 
+0

张扬的变量,然后再试 –

+0

它是相同的,仍空 –

+0

没有人知道如何获得价值? –

回答

0

随着数据库的形象示人,这是Score实例数据库节点孩子的位置scores。如下所示更新您的代码。

第二个问题是数据库中的score是整数,而不是类,因为您的类需要Score。您必须更新数据库包含字符串或更改Score处理score为整数。此外,您Score类缺少username setter方法。

query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // Get Post object and use the values to update the UI 
     if (dataSnapshot.exists()) { 
      for (DataSnapshot snap : dataSnapshot.getChildren()) { 
       Score scores1 = snap.getValue(Score.class); 
       Log.d(TAG, " scores1 " + scores1 + " datasnapshot to String " + dataSnapshot.getValue().toString()); 
       Log.d(TAG, " user= " + scores1.getUsername()); 
       Log.d(TAG, " score= " + scores1.getScore()); 
       scoresTextView.setText(scores1.getScore()); 
      } 
     } else { 
      Log.e(TAG, "onDataChange: NO DATA"); 
     } 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.e(TAG, "onCancelled: " + databaseError.getMessage()); 
    } 
}); 
+0

谢谢qbix,现在的工作。 –

+0

忘记查看数据库,您是对的。如果你不想推送数据,我认为setter方法不是必需的 –