2017-07-27 63 views
0

我想在标题工具栏中显示从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) { 
      } 
     }); 

     } 

当打开应用程序没有出现预期的标题,活动的名称出现。 什么可能是错的?

+0

打印并显示dataSnapshot(key,value)的所有值,您将看到您正在接收的内容。 –

+1

最好发布实际JSON片段(作为文本),而不是估计数据库的外观。您可以通过点击[Firebase数据库控制台](https://console.firebase.google.com/project/_/database/data)中的“导出JSON”链接来获取此信息。 –

回答

2

您必须再次设置快照中工具栏的标题。

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) { 
    } 
} 
+0

它的工作原理。 但是当第一次打开屏幕时不会出现。需要回去再去。 它可能是什么? 看起来他没有及时打电话。 @AjilO – TiagoIB

+0

'addValueListener'在不同的线程上运行,通常来自Firebase服务器的响应需要一些时间(这取决于您的网络速度等因素)。我不知道这是否可以解决。我建议你添加一个'ProgressDialog',它创建并显示在'onCreate'方法中,并在'onDataChanged'方法中被解散。我再次强调,这可能不是最佳解决方案;但肯定会完成工作。 –

+0

我明白。它可以暂时解决是的。 但是我会调整我的项目,因为这个屏幕是通过从前一个屏幕发送的ID挂载的。只要我发送ID,我也会发送公司名称,因为我以前可以访问此数据。我相信它会起作用。谢谢。 @AjilO – TiagoIB