2016-09-13 5 views
1

사용자 주소를 저장하는 실시간 firebase 데이터베이스가 있습니다. 값을 가져 와서 안드로이드 레이아웃의 textviews에 할당하고 싶습니다. 나는이 같은 접근에게 데이터를 시도 :firebase 실시간 데이터베이스에서 하위 값에 액세스하려면 어떻게해야합니까?

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

그러나 그것은 나에게 단지 거리의 중포 기지 URL이 아닌 실제 값을 제공합니다. 이 데이터를 검색하려면 어떻게해야합니까?

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) { 

      } 
     }); 

    } 

This is how the database looks like.

.

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

가능한 중복 http://stackoverflow.com/questions/27848313/ firebase-retrieve-child-android) –

답변

0

중포 기지의 항목에 대한 데이터를 얻을 수있는 권장되는 방법은 반드시 그 클래스 일치의 회원의 모든 데이터 당신의 정확히 키를 만들고, 당신은 DB에서 끌어 할 개체를 나타내는 클래스를 만드는 것입니다 (예 : 문자열, 도시, 국가, 주, 주, 거리, zip_postal_code 등 5 개 문자열을 가진 객체가있을 것입니다.)이 모든 객체에 setter 및 getter가 있는지 확인하십시오. 자동으로 생성합니다.

그런 다음 다음과 같이 데이터베이스 참조를위한 리스너 :

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

관련 문제