我想在数据库中读取我的数据,所以我使用 firebase,当我想读取我的数据时,我使用这段代码
DatabaseReference nortjo87Ref=FirebaseDatabase.getInstance().getReference("tes");
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
value = dataSnapshot.getValue(String.class);
Log.w("", "value is: "+ value);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w("", "loadPost:onCancelled", databaseError.toException());
// ...
}
};
nortjo87Ref.addValueEventListener(postListener);
我在运行栏中看到我的值已经更改,但是在此之后,当我将 TextView 设置为“value(String)”时,
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
value = dataSnapshot.getValue(String.class);
Log.w("", "value is: "+ value);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w("", "loadPost:onCancelled", databaseError.toException());
// ...
}
};
nortjo87Ref.addValueEventListener(postListener);
tvText.setText(value);
该值为空,所以我想问一下,如何选择我的值(我的 TextView )
最佳答案
您需要在 onDataChange
中添加此代码 tvText.setText(value);
:
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
value = dataSnapshot.getValue(String.class);
Log.w("", "value is: "+ value);
tvText.setText(value);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w("", "loadPost:onCancelled", databaseError.toException());
// ...
}
};
那是因为 onDataChange
是异步的,这意味着它之后的代码将在它检索完整数据之前执行,因此你在 textView 上得到了 null
关于java - 如何在此读取方法 firebase 中更改我的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451393/