我正在使用Android Studio创建一个应用程序,并使用Firebase模拟后端数据库。目前,我正在尝试使应用程序能够接收并显示我通过Firebase输入的数据。当我使用Firebase data snapshot方法捕获数据时,由于快照发生在内部类中,我无法保存和使用数据。
例如,在Firebase中,我已将“Fri”的值指定给“2步”。如果您查看下面的代码,第一条print语句(内部类内)打印“Friday Steps:2 Steps”,而第二条print语句(内部类外)打印“Friday Steps:null”。这是一个问题,因为我需要能够在以后将值分配给mDataset的assign语句中使用fridaySteps的正确值(以及其他工作日的字符串变量)。
public class MainActivity extends AppCompatActivity {
private String[] mDataset = new String[7];
String fridaySteps;
String thursdaySteps;
String wednesdaySteps;
String tuesdaySteps;
String mondaySteps;
@Override
protected void onCreate(Bundle savedInstanceState) {
mDataset[0]= "";
mDataset[1]= "";
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Firebase.setAndroidContext(this);
Firebase ref = new Firebase(Config.FIREBASE_URL);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
fridaySteps = snapshot.child("Fri").getValue(String.class);
thursdaySteps = snapshot.child("Thu").getValue(String.class);
wednesdaySteps = snapshot.child("Wed").getValue(String.class);
tuesdaySteps = snapshot.child("Tue").getValue(String.class);
mondaySteps = snapshot.child("Mon").getValue(String.class);
System.out.println("Friday Steps: "+fridaySteps);
}
@Override public void onCancelled(FirebaseError error) { }
});
System.out.println("Friday Steps: "+fridaySteps);
mDataset[2] = ("Fri "+fridaySteps);
mDataset[3] = ("Thu "+thursdaySteps);
mDataset[4] = ("Wed "+wednesdaySteps);
mDataset[5] = ("Tue "+tuesdaySteps);
mDataset[6] = ("Mon "+mondaySteps);
}
}
有人建议我如何解决这个问题吗?谢谢
这是因为addValueEventListener是异步的,当addValueEventListener被执行时,下一步是打印第二个系统。出来println(“Friday Steps:”Friday Steps),由于这个原因,它将返回null,它不会等待addValueEventListener完成。另一方面,第一个系统。出来println(“星期五步骤:“星期五步骤”)将等待addValueEventListener完成,然后打印消息。
由于检索Firebase数据是异步的,因此您无法立即访问它。
将您的值分配到onDataChange
中的mDataset
以供以后使用。这样地:
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
fridaySteps = snapshot.child("Fri").getValue(String.class);
thursdaySteps = snapshot.child("Thu").getValue(String.class);
wednesdaySteps = snapshot.child("Wed").getValue(String.class);
tuesdaySteps = snapshot.child("Tue").getValue(String.class);
mondaySteps = snapshot.child("Mon").getValue(String.class);
mDataset[2] = ("Fri "+fridaySteps);
mDataset[3] = ("Thu "+thursdaySteps);
mDataset[4] = ("Wed "+wednesdaySteps);
mDataset[5] = ("Tue "+tuesdaySteps);
mDataset[6] = ("Mon "+mondaySteps);
printData();
}
@Override public void onCancelled(FirebaseError error) { }
});
...
private void printData() {
System.out.println("Friday Steps: "+fridaySteps);
}
我正在研究一个涉及for循环和if-else语句的java函数。我需要根据多次迭代中的条件更改标志变量的值。我声明了一个名为flag的变量,并希望根据每次迭代中的条件进行更改。我需要在每次迭代结束时打印flag变量的值。但是当我打印变量时,它显示了一个错误,变量没有初始化。如果我给它一个初始值,它会一直打印初始值,而不是在If-else语句中处理的值。我不能根据自己的要求初始化for循环中的fla
问题内容: 在内部类中,可以访问外部类的变量,但不能访问方法的局部变量。我了解了无法访问方法的局部变量的部分,但我想知道为什么外部类变量可以访问? 我的理解是,由于内部类与外部类绑定,因此只要父级可用,子级就可以访问其父级变量。我对么? 问题答案: 假设您的外部类在内部类的范围内(非静态)被称为,以获取该字段。 例如, 其中Outer是类的名称,并标识该字段。 您也可以直接抓取它,但是如果由于阴影
在内部类中,外部类的变量是可访问的,但方法的局部变量不是。我理解了关于方法的局部变量不可访问的部分,但我想知道为什么外部类变量是可访问的? 我的理解是,由于内部类与外部类绑定,因此只要父类可用,子类就可以访问其父变量。我说得对吗?
为什么<code>test
问题内容: 为什么我需要声明一个方法,好像我在方法中定义的需要使用它一样? 范例: } 为什么String 需要是最终常量?它如何影响? 问题答案: 答案是两者在不同的范围内。因此该变量可以在内部类访问它之前更改。将其最终确定可以防止这种情况。