首页 > 解决方案 > 在数据快照中,我无法从中获取值

问题描述

我已经尝试了几次从类中获取字符串month、、、和的值firstWeek,但我无法将类中的值带到行中(它不起作用)。之后,我尝试在using上设置文本,它获取值并显示在屏幕上,但不获取数组上的值。之后,我尝试使用 Toast 消息是否显示值,但值没有显示在 toast 消息上它是空的,请帮我把值取到secondWeekthirdWeekDataSnapshotDataSnapshotmonthSalesDataArrayList.add(new MonthSalesData("1st Week", firstWeek));TextViewFirstWeek.setText(firstWeek);DataSnapshotmonthSalesDataArrayList.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
    
        }

标签: androidfirebase

解决方案


通过清理代码的缩进,问题变得清晰可见——变量firstWeek等与and指令secondWeek不在同一范围内。此代码也是异步的 -在您尝试使用.ToastmonthSalesDataArrayListonDataChangeTextView 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(...)改用。


推荐阅读