Android 在数据快照中,我无法';我无法从中获取外部的值
我曾多次尝试从Android 在数据快照中,我无法';我无法从中获取外部的值,android,firebase,Android,Firebase,我曾多次尝试从DataSnapshot类中获取字符串month、firstWeek、secondWeek和thirdWeek的值,但我无法将DataSnapshot类中的值提取到monthSalesDataArrayList.add(新的MonthSalesData(“第一周”),第一周)(它不工作)。之后,我尝试使用FirstWeek.setText(FirstWeek)在TextView上设置文本它获取值并显示在屏幕上,但不获取数组上的值。之后,我尝试了Toast消息,不管它是否显示值,但是
DataSnapshot
类中获取字符串month
、firstWeek
、secondWeek
和thirdWeek
的值,但我无法将DataSnapshot
类中的值提取到monthSalesDataArrayList.add(新的MonthSalesData(“第一周”),第一周)代码>(它不工作)。之后,我尝试使用FirstWeek.setText(FirstWeek)在TextView
上设置文本代码>它获取值并显示在屏幕上,但不获取数组上的值。之后,我尝试了Toast消息,不管它是否显示值,但是值没有显示在Toast消息上,它在那里是空的,请帮助我将DataSnapshot
值添加到monthSalesDataArrayList.add(新的MonthSalesData(“第一周”),到这里“**”)代码>
通过清除代码缩进,问题变得清晰可见-变量firstWeek
、secondWeek
等与Toast
和monthSalesDataArrayList
指令不在同一范围内。此代码也是异步的-在尝试使用TextView
中的文本之前,不会执行onDataChange
事件处理程序中的代码
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!
}
});
}
此外,如果编辑了/Graph/Record
处的数据,则可以重新运行onDataChange
。如果希望此代码只运行一次,请改用
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!
}
});
}