从Firebase数据库恢复数据并在工具栏中设置标题
我想在标题工具栏中显示从Firebase数据库检索到的数据。但它不起作用。从Firebase数据库恢复数据并在工具栏中设置标题
银行的结构基本上是:
Firebase Database:
- Companies
--ID
---name_company
目前代码:
public class ProfileActivity extends AppCompatActivity {
private Toolbar mToolbar = null;
private String mId_company = null;
private String mNameCompany;
private DatabaseReference mCompanyDB;
private StorageReference mStorage;
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
mToolbar = (Toolbar) findViewById(R.id.toolbarPerfilEmpresa);
mToolbar.setTitle(mNameCompany);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mStorage = FirebaseStorage.getInstance().getReference();
mCompanyDB = FirebaseDatabase.getInstance().getReference().child("Companies");
mCompanyDB.keepSynced(true);
/* ID Company*/
mId_company = getIntent().getExtras().getString("id_company");
/* Title Activity */
mCompanyDB.child(mId_company).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mNameCompany = (String) dataSnapshot.child("name_company").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
当打开应用程序没有出现预期的标题,活动的名称出现。 什么可能是错的?
您必须再次设置快照中工具栏的标题。
mCompanyDB.child(mId_company).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mNameCompany = (String) dataSnapshot.child("name_company").getValue();
mToolbar.setTitle(mNameCompany);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
它的工作原理。 但是当第一次打开屏幕时不会出现。需要回去再去。 它可能是什么? 看起来他没有及时打电话。 @AjilO – TiagoIB
'addValueListener'在不同的线程上运行,通常来自Firebase服务器的响应需要一些时间(这取决于您的网络速度等因素)。我不知道这是否可以解决。我建议你添加一个'ProgressDialog',它创建并显示在'onCreate'方法中,并在'onDataChanged'方法中被解散。我再次强调,这可能不是最佳解决方案;但肯定会完成工作。 –
我明白。它可以暂时解决是的。 但是我会调整我的项目,因为这个屏幕是通过从前一个屏幕发送的ID挂载的。只要我发送ID,我也会发送公司名称,因为我以前可以访问此数据。我相信它会起作用。谢谢。 @AjilO – TiagoIB
打印并显示dataSnapshot(key,value)的所有值,您将看到您正在接收的内容。 –
最好发布实际JSON片段(作为文本),而不是估计数据库的外观。您可以通过点击[Firebase数据库控制台](https://console.firebase.google.com/project/_/database/data)中的“导出JSON”链接来获取此信息。 –