java - 无法在 RecyclerView 中显示来自 dataSnapshot 的值
问题描述
我正在使用 aRecyclerView
来展示我dataSnapshot
的结果,但无法正确显示结果。以前我的 JSON 树的结构是 gameTimes > user_id > game > results,但现在 json 树已缩短为 gameTimes > game > results,以便更容易找到用户名。
我有我dataSnapshot
的内心GameInfoHolder
和setGameInfo
方法。这在实践中可能不是最好的方法,但在 JSON 树更改之前,结果会起作用,但分数的用户名没有显示在结果旁边。不是我根本没有任何结果。下面我包含了一段数据来显示我的问题。
我已经包含了我的 JSON 树的结构以供参考。
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference hiscoreRef = rootRef.child("gameTimes").child(userID).child("game");
Query hiscoreQuery = hiscoreRef.orderByChild("gameTime").limitToLast(10);
FirebaseRecyclerOptions<GameInfo> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<GameInfo>()
.setQuery(hiscoreQuery, GameInfo.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<GameInfo, GameInfoHolder>(firebaseRecyclerOptions) {
@Override
protected void onBindViewHolder(@NonNull GameInfoHolder gameInfoHolder, int i, @NonNull GameInfo gameInfo) {
gameInfoHolder.setGameInfo(gameInfo);
}
@NonNull
@Override
public GameInfoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.firebase_item_file, parent, false);
return new GameInfoHolder(view);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
private class GameInfoHolder extends RecyclerView.ViewHolder {
private TextView score1;
private TextView namename1;
GameInfoHolder(View itemView) {
super(itemView);
score1 = itemView.findViewById(R.id.score1);
name1 = itemView.findViewById(R.id.name1);
}
void setGameInfo(GameInfo gameInfo) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference hiscoreRef = rootRef.child("gameTimes").child("game");
Query hiscoreQuery = hiscoreRef.orderByChild("gameTime").limitToFirst(10);
hiscoreQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot){
int hiscore = 0;
String uName = "";
for (DataSnapshot ds: dataSnapshot.getChildren()) {
hiscore = ds.child("gameTime").getValue(Integer.class);
uName = ds.child("username").getValue(String.class);
}
Log.d("TAG", String.valueOf(hiscore));
String mScore1 = df.format(hiscore / 1000.0);
score1.setText(mScore1);
String mName1 = uName;
name1.setText(mName1);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // never ignore errors
}
});
}
}
{
"gameTimes" : {
"game" : {
"-LoHuG5ZY_e0Gzs3Phkh" : {
"game_bank" : 0,
"game_count" : 3,
"gameTime" : 7194,
"user_id" : "kzqG0GBns0bGLQdPeV70pO1k4BB2",
"username" : "DataBoi"
},
"-LoHuMQFK7z2nN3kFb3F" : {
"game_bank" : 0,
"game_count" : 2,
"gameTime" : 11784,
"user_id" : "kzqG0GBns0bGLQdPeV70pO1k4BB2",
"username" : "DataBoi"
},
"-LoHvWG32slt1hCXzaei" : {
"game_bank" : 0,
"game_count" : 3,
"gameTime" : 20072,
"user_id" : "kzqG0GBns0bGLQdPeV70pO1k4BB2",
"username" : "DataBoi"
},
"-LoHvWHjhZJ3fqkbWmjy" : {
"game_bank" : 0,
"game_count" : 3,
"gameTime" : 20072,
"user_id" : "kzqG0GBns0bGLQdPeV70pO1k4BB2",
"username" : "DataBoi"
},
"-LoHxnIM7KDce1rxr1MD" : {
"game_bank" : 0,
"game_count" : 2,
"gameTime" : 11470,
"user_id" : "T9psJTZhapPvXFuzo5NZ6bHG6xo1",
"username" : "DataMan"
}
}
},
"userDetails" : {
"T9psJTZhapPvXFuzo5NZ6bHG6xo1" : {
"username" : "DataMan"
},
"kzqG0GBns0bGLQdPeV70pO1k4BB2" : {
"username" : "DataBoi"
}
},
"userInfo" : {
"DataBoi" : {
"kzqG0GBns0bGLQdPeV70pO1k4BB2" : {
"date_of_birth" : "08/08/2018",
"education" : "Master's",
"exercise" : "1 - 2 Hours a Week",
"forename" : "Data",
"gender" : "Male",
"surname" : "Boi",
"username" : "DataBoi"
}
},
"DataMan" : {
"T9psJTZhapPvXFuzo5NZ6bHG6xo1" : {
"date_of_birth" : "01/01/1019",
"education" : "Yes",
"exercise" : "10 Hours or more a Week",
"forename" : "Data",
"gender" : "Male",
"surname" : "Man",
"username" : "DataMan"
}
}
}
}
我的预期结果将是记分板打开并在右侧查看前十个最佳游戏时间的数据快照以及左侧旁边的适当用户名(属于该痛处)。回收站视图为这些视图设置得很好。问题只是得到结果。我的 JSON 结构有问题吗?
解决方案
推荐阅读
- xml - 使用 perl 的 SOAP 客户端 - WSDL URL 可用
- python - Python 文档文章“安全注意事项”关于 `smtplib` 的 SSL 上下文
- javascript - 将选定的 textContent 和新值传递给更新函数时元素文本不会改变
- java - Java 连接 2 个哈希映射,包括重复键
- jestjs - 如何监视 Apollo 客户端缓存调用以进行单元测试?
- java - 如何摆脱 XXX 自动生成的方法存根
- django - 从 Django 后端到 React-Redux 前端的对象 JSON 响应的对象
- ruby-on-rails - 转换为 DateTime 方法切断列表呈现(Rails)
- excel - 公式 Excel 3 条件
- javascript - Vue i18n 格式美元货币