我在读取Firebase的价值时遇到一些问题,运行项目时收入和支出没有变化,好像它没有在Firebase上获得价值,但我不知道为什么?
private void getMoney()
{
myRef.child("money").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("income").exists()) {
income = Integer.parseInt(dataSnapshot.child("income").getValue().toString());
}
if (dataSnapshot.child("expense").exists()) {
expense = Integer.parseInt(dataSnapshot.child("expense").getValue().toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
money = income - expense;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtTong= (TextView) findViewById(R.id.txtTong);
getMoney();
txtTong.setText("Money: " + money);
initView();
最佳答案
首先,在您的(getMoney())的onDatachange方法中,更改此部分:
if (dataSnapshot.child("income").exists()) {
income = Integer.parseInt(dataSnapshot.child("income").getValue().toString());
}
if (dataSnapshot.child("expense").exists()) {
expense = Integer.parseInt(dataSnapshot.child("expense").getValue().toString());
}
对此
if (dataSnapshot.child("income").exists()) {
income = dataSnapshot.child("income").getValue(Integer.class);
}
if (dataSnapshot.child("expense").exists()) {
expense = dataSnapshot.child("expense").getValue(Integer.class);
}
并更改其位置:
money = income - expense;
并将其放在onDatachange的末尾,在这些下面:
if (dataSnapshot.child("income").exists()) {
income = dataSnapshot.child("income").getValue(Integer.class);
}
if (dataSnapshot.child("expense").exists()) {
expense = dataSnapshot.child("expense").getValue(Integer.class);
}
//here you add it
money = income - expense;
编辑
看起来值被很好地检索了,唯一的问题是在textview中显示值。
当在onDatachange()之外设置setTEXT()时,文本视图不知道(money)的值是什么,因为只有将货币放在onDatachange中时,货币才具有正确的值。
因此,所有与金钱有关的事物都应包含在onDatachange中
所以你这样做:
myRef.child("money").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("income").exists()) {
income = dataSnapshot.child("income").getValue(Integer.class);
}
if (dataSnapshot.child("expense").exists()) {
expense = dataSnapshot.child("expense").getValue(Integer.class);
}
//here you set money
money = income - expense;
//and also here you set the text
txtTong.setText("Money: " + money);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
发生这种情况是因为不能保证在设置textview中的money值之前调用onDatachange
关于java - 无法在Android的Firebase上获得值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47572184/