2016-09-13 46 views
1

我有一個存儲用戶地址的實時Firebase數據庫。我想獲取值並將它們分配給android佈局中的textviews。我試圖訪問數據是這樣的:如何訪問firebase中的子值實時數據庫

String city = (mDatabase.getDatabase().getReference().child(user_data.getString("uidkey", null)).child("city")).toString(); 
     _cityText.setText(city); 

但是,讓我只有這條街的火力網址,而不是實際值。我怎樣才能獲取這些數據?

This is how the database looks like.

public void onStart(){ 
     super.onStart(); 
     final SharedPreferences user_data = getSharedPreferences("PESASEND_PREFS", Context.MODE_PRIVATE); 

     mDatabase.child(user_data.getString("uidkey", null)).addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Address address = dataSnapshot.getValue(Address.class); 
       // address.getCity(); 

       _state_province_Text.setText(address.getStreet()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

    } 

public class Address { 

    public String street; 
    public String city; 
    public String state; 
    public String zip_postal_code; 
    public String country; 

    public Address(){}; 

    public Address(String street, String city, String state, String zip_postal_code, String country){ 
     this.street = street; 
     this.city = city; 
     this.state = state; 
     this.zip_postal_code = zip_postal_code; 
     this.country = country; 
    } 

    public String getStreet(){return street;} 
    public String getCity(){return city;} 
    public String getState(){return state;} 
    public String getZipPostalCode(){return zip_postal_code;} 
    public String getCountry(){return country;} 

} 
+0

[火力地堡檢索子的Android(可能的重複http://stackoverflow.com/questions/27848313/ firebase-retrieve-child-android) –

回答

0

推薦的方式來獲得在火力點一個條目的數據是創建類代表你想從DB拉對象,確保所有賽課的成員的數據,你的完全鍵希望拉(例如,你將有一個對象與5個字符串,城市,國家,州,街道,zip_postal_code),並確保所有這些對象有setter和getters(只是自動生成這些)

然後,你可以添加您的數據庫參考的聽衆,如下所示:

mDatabase.child("Addresses").child(user_data.getString("uidkey", null)).addListenerForSingleValueEvent(
     new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       // Get the address object 
       Address address = dataSnapshot.getValue(Address.class); 
       // get the string here, using address.getCity() or whatever you called the getter 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 

您還可以使用相同的地址類將新的地址對象添加到您的Firebase。

此外,如果你是填充的列表視圖,這樣可以更簡單和更清潔的,如果你使用firebaseListAdapter

+0

這就是我寫的:我已經寫了相同的代碼並將其放入onStart();我使用String street = addess.getStreet()。但是,這會導致應用程序因空例外而崩潰。 – mpanga

+0

多數民衆贊成在我使用的地址類和上面的是我如何得到它。 – mpanga

+0

請參閱我對答案的編輯。您需要在用戶標識子級之前將「地址」添加爲數據庫引用的子級。 – Dportology

相關問題