Android 检索firebase数据并将其保存到共享首选项会生成null
我在Android 检索firebase数据并将其保存到共享首选项会生成null,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我在firebase上有一个数据库,我想从中检索一些数据,并使用共享首选项将其保存到我的应用程序中。当我试图从另一个activtiy中从共享首选项获取值时,我在获取null之前保存了该值。但是,祝酒词会以正确的价值观出现 我从onCreate()调用getLocDbs() 我尝试了async任务,但后来我读到Firebase本身是异步的 为什么我得到空值 谢谢 public void getLocDbs() { firebaseRef.child("rpi_lox").addList
firebase
上有一个数据库,我想从中检索一些数据,并使用共享首选项将其保存到我的应用程序中。当我试图从另一个activtiy
中从共享首选项
获取值时,我在获取null之前保存了该值。但是,祝酒词会以正确的价值观出现
我从onCreate()
调用getLocDbs()
我尝试了async任务
,但后来我读到Firebase
本身是异步的
为什么我得到空值
谢谢
public void getLocDbs() {
firebaseRef.child("rpi_lox").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Toast.makeText(Welcomer.this, singleSnapshot.getValue
(postObject.class).result, Toast.LENGTH_SHORT).show();
allLox += singleSnapshot.getValue
(rpiLocTemplate.class).locName+ ";";
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
PreferenceManager.getDefaultSharedPreferences(Welcomer.this)
.edit()
.putString("ls_locations", allLox).apply();
}
你得走了
PreferenceManager.getDefaultSharedPreferences(Welcomer.this)
.edit()
.putString("ls_locations", allLox).apply();
在onDataChange
内部,因为网络调用需要一段时间才能完成,并且在收到响应时将调用onDataChange
,否则您将优先保存null,稍后将接收数据
public void getLocDbs() {
firebaseRef.child("rpi_lox").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Toast.makeText(Welcomer.this, singleSnapshot.getValue
(postObject.class).result, Toast.LENGTH_SHORT).show();
allLox += singleSnapshot.getValue
(rpiLocTemplate.class).locName+ ";";
}
PreferenceManager.getDefaultSharedPreferences(Welcomer.this)
.edit()
.putString("ls_locations", allLox).apply();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
您已经将字符串声明为stringalllox
将分配空值,当您执行+=
时,它将在第一次迭代中作为
`allLox = allLox + otherstuff`
// allLox = null + otherstuff
因此,将字符串变量声明为
String allLox = "";
或者您可以使用StringBuilder
同时使用append
方法来实现效率您太棒了,非常感谢!一个问题:你知道为什么我的字符串以null开头吗?剩下的很好,我得到了我需要的一切。可能是的,像String allLox=“”
否则它将是空的,+=
意味着allLox=allLoc+其他东西
,我很高兴我能帮上忙一个类似的错误:你能帮我吗?谢谢