java - 如何将firebase数据库的eventlistner的数据快照存储在字符串中
问题描述
我正在尝试将子节点的值存储在我的 firebase 项目的字符串中。但是当我超出范围时,数据不再存储。请帮助我.. 我正在附加代码片段,我想将位置字符串存储到 eventlistener 之外的另一个字符串中。
private RecyclerView findFriendList;
private EditText searchET;
private String str = "";
private DatabaseReference usersRef;
private DatabaseReference userlocationRef;
private String address ="" ;
private String locationDb ="";
private TextView getlocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_electrician);
getlocation =findViewById(R.id.get_location_electrician);
userlocationRef = FirebaseDatabase.getInstance().getReference("Users");
userlocationRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
if(dataSnapshot.exists())
{
String location = dataSnapshot.child("location").getValue().toString();
locationDb = location;
address =locationDb;
getlocation.setText(address);
Toast.makeText(FindElectricianActivity.this, address, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
// Toast.makeText(this, address, Toast.LENGTH_SHORT).show();
address = getlocation.getText().toString();
usersRef = FirebaseDatabase.getInstance().getReference().child("Location").child(address).child("ServiceProvider").child("Electrician");
FirebaseRecyclerOptions<Contacts> options = null;
searchET = findViewById(R.id.search_user_text_electrician);
findFriendList = findViewById(R.id.find_friends_list_electrician);
findFriendList.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
searchET.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charseq, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence charseq, int start, int before, int count) {
if (searchET.getText().toString().equals("")) {
Toast.makeText(FindElectricianActivity.this, "please write name to search", Toast.LENGTH_SHORT).show();
} else {
str = charseq.toString();
onStart();
}
}
@Override
public void afterTextChanged(Editable charseq) {
}
});
}
在这里,我想将位置字符串存储到地址字符串中。只要我在 addValuEventListner 中存在,它就会存储。但在外面它变成了null。我添加了 Toast 消息来验证它。所以请帮帮我
解决方案
Firebase API 是异步的,并在任何数据可用之前立即返回。在调用回调之前,不会分配您的类成员中的数据。在此之前,它们将是空的。在调用回调之前,您有责任仅访问这些成员变量。这意味着您可能应该只在回调或它们调用的其他方法中执行此操作。
推荐阅读
- vba - 排列形状以使边缘重合 Visio VBA
- typescript - 如何将 firestores 类型导入 utils 文件?
- tensorflow - 如何在 Tensorflow 中的 Dataset 对象中显示类分布
- swift - 为什么 CALayer 没有被添加到 UITextView
- asp.net-core - 对 EF Core 2.1 关系的质疑
- node.js - 将已进行的比赛转换为联赛表
- python-3.x - 将 random.choice() 与类一起使用
- ruby-on-rails - 如何在rails 6中的application.html.erb中包含一个url?
- c++ - Visual Studio Code - 远程调试 Bazel C++ - 无法读取文件'vscode-remote://dev-file
- r - 函数中的 NaN