android - 在数据快照中,我无法从中获取值
问题描述
我已经尝试了几次从类中获取字符串month
、、、和的值firstWeek
,但我无法将类中的值带到行中(它不起作用)。之后,我尝试在using上设置文本,它获取值并显示在屏幕上,但不获取数组上的值。之后,我尝试使用 Toast 消息是否显示值,但值没有显示在 toast 消息上它是空的,请帮我把值取到secondWeek
thirdWeek
DataSnapshot
DataSnapshot
monthSalesDataArrayList.add(new MonthSalesData("1st Week", firstWeek));
TextView
FirstWeek.setText(firstWeek);
DataSnapshot
monthSalesDataArrayList.add(new MonthSalesData("1st Week", **"to Here"**));
public void takeMonthSales(){
GetRecord = FirebaseDatabase.getInstance().getReference().child("Graph").child("Record");
GetRecord.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String month = dataSnapshot.child("Month").getValue(String.class);
String firstWeek = dataSnapshot.child("1st week").getValue().toString();
String secondWeek = dataSnapshot.child("2nd week").getValue().toString();
String thirdWeek = dataSnapshot.child("3rd week").getValue().toString();
String fourthWeek = dataSnapshot.child("4th week").getValue().toString();
setMonth.setText("Month of report " + month);
FirstWeek.setText(firstWeek);
SecondWeek.setText(secondWeek);
ThirdWeek.setText(thirdWeek);
FourthWeek.setText(fourthWeek);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Toast.makeText(AdminGraphView.this, "The value is " + FirstWeek.getText().toString(), Toast.LENGTH_SHORT).show();
//This is the array for the barchart values to the graph
monthSalesDataArrayList.clear();
monthSalesDataArrayList.add(new MonthSalesData("1st Week", "58454"));
monthSalesDataArrayList.add(new MonthSalesData("2nd Week", "72636"));
monthSalesDataArrayList.add(new MonthSalesData("3rd Week", "62301"));
monthSalesDataArrayList.add(new MonthSalesData("4th Week", "85656"));
// enter code here
}
解决方案
通过清理代码的缩进,问题变得清晰可见——变量firstWeek
等与and指令secondWeek
不在同一范围内。此代码也是异步的 -在您尝试使用.Toast
monthSalesDataArrayList
onDataChange
TextView
FirstWeek
public void takeMonthSales(){
GetRecord = FirebaseDatabase.getInstance().getReference().child("Graph").child("Record");
GetRecord.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String month = dataSnapshot.child("Month").getValue(String.class);
String firstWeek = dataSnapshot.child("1st week").getValue().toString();
String secondWeek = dataSnapshot.child("2nd week").getValue().toString();
String thirdWeek = dataSnapshot.child("3rd week").getValue().toString();
String fourthWeek = dataSnapshot.child("4th week").getValue().toString();
setMonth.setText("Month of report " + month);
FirstWeek.setText(firstWeek);
SecondWeek.setText(secondWeek);
ThirdWeek.setText(thirdWeek);
FourthWeek.setText(fourthWeek);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Toast.makeText(AdminGraphView.this, "The value is " + FirstWeek.getText().toString(), Toast.LENGTH_SHORT).show();
//This is the array for the barchart values to the graph
monthSalesDataArrayList.clear();
monthSalesDataArrayList.add(new MonthSalesData("1st Week", "58454"));
monthSalesDataArrayList.add(new MonthSalesData("2nd Week", "72636"));
monthSalesDataArrayList.add(new MonthSalesData("3rd Week", "62301"));
monthSalesDataArrayList.add(new MonthSalesData("4th Week", "85656"));
// enter code here
}
您需要将这些指令移到addValueEventListener
事件处理程序中。
public void takeMonthSales(){
// use a local variable here! (if you are using it elsewhere, you should initialize it elsewhere not here)
DatabaseReference recordRef = FirebaseDatabase.getInstance().getReference().child("Graph").child("Record");
recordRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String month = dataSnapshot.child("Month").getValue(String.class);
String firstWeek = dataSnapshot.child("1st week").getValue().toString();
String secondWeek = dataSnapshot.child("2nd week").getValue().toString();
String thirdWeek = dataSnapshot.child("3rd week").getValue().toString();
String fourthWeek = dataSnapshot.child("4th week").getValue().toString();
setMonth.setText("Month of report " + month);
FirstWeek.setText(firstWeek);
SecondWeek.setText(secondWeek);
ThirdWeek.setText(thirdWeek);
FourthWeek.setText(fourthWeek);
Toast.makeText(AdminGraphView.this, "The value is " + FirstWeek.getText().toString(), Toast.LENGTH_SHORT).show();
//This is the array for the barchart values to the graph
monthSalesDataArrayList.clear();
monthSalesDataArrayList.add(new MonthSalesData("1st Week", firstWeek));
monthSalesDataArrayList.add(new MonthSalesData("2nd Week", secondWeek));
monthSalesDataArrayList.add(new MonthSalesData("3rd Week", thirdWeek));
monthSalesDataArrayList.add(new MonthSalesData("4th Week", fouthWeek));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
// TODO: Implement error handling!
}
});
}
此外,onDataChange
如果编辑了数据,则可能会重新运行/Graph/Record
。如果您希望此代码只运行一次,请addListenerForSingleValueEvent(...)
改用。
推荐阅读
- python - 在使用 filedialog 打开的文件夹中创建子文件夹
- angular - 如何仅检测角度形式的变化值?
- c++ - 将取消引用的智能指针的地址传递给需要原始指针的函数
- python - 使用 scikit-learn 预测单个值会导致 ValueError
- json - 如何使用 gin gonic 在 Go 中上传多部分文件和 json?
- javascript - 从 json 解析数组的 java 脚本
- c# - EF CORE datetime 保存时间为 0
- reactjs - 如何在渲染后更新状态
- git - Github 桌面/VsCcode 身份验证失败
- javascript - 是否有更简洁的方法来检查变量是否具有类型编号?