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!
       }
   });
}