2016-09-13 3 views
1

私は、ユーザアドレスを格納するリアルタイムfirebaseデータベースを持っています。私は値を取得し、アンドロイドのレイアウトのtextviewsに割り当てたいです。私はこのようなデータにアクセスしようとしました:firebase realtimeデータベースの子値にアクセスするにはどうすればいいですか

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

しかし、実際の値ではなく、ストリートのファイヤーベースのURLのみが表示されます。このデータを取得するにはどうすればよいですか?

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

[Firebase子のAndroidを検索]の可能な複製を使用している場合また、これははるかに簡単かつきれいにすることができます(http://stackoverflow.com/questions/27848313/ firebase-retrieve-child-android) –

答えて

0

firebaseにエントリのデータを取得するための推奨方法は、そのクラスの試合のメンバーのすべてのデータの正確キーがわからを作り、あなたがDBからプルしたいオブジェクトを表すクラスを作成することです(例えば、5つの文字列、都市、国、州、通り、zip_postal_codeのオブジェクトを持っていて)これらのオブジェクトのすべてにセッターとゲッターがあることを確認してください。次のようなデータベース参照のリスナー:

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()を使用します。しかし、これはnull例外のためにアプリケーションがクラッシュする原因となります。 – mpanga

+0

私が使用しているアドレスクラスと上記のアドレスクラスは、どうやって取得しているのですか? – mpanga

+0

私の答えの編集を参照してください。ユーザーIDの子の前にDB参照の子として「アドレス」を追加する必要があります。 – Dportology

関連する問題