2017-09-20 7 views
0

Hallo, ich bin ein Neuling auf Firebase .Dies ist, wie meine DatenAbrufen von Daten aus verschachtelten Objekten Firebase mit Android/Java?

wie enter image description here aussehen würde ich gerne wissen, wie ich die distributorInfo abrufen kann von retailers.I distributorInfo aus einem FirebaseRecyclerAdapter des populateViewHolder method.I Uhr abrufen versuchte kann den Schlüssel für das ausgewählte Element abrufen. Wie bekomme ich die Informationen in distributorInfo?

private void getRetailers() { 
     FirebaseRecyclerAdapter<RetailerInfo,RetailerViewHolder> adapter = new FirebaseRecyclerAdapter<RetailerInfo, RetailerViewHolder>(
       RetailerInfo.class, 
       R.layout.distributor_row, 
       RetailerViewHolder.class, 
       mDatabase 
     ) { 
      @Override 
      protected void populateViewHolder(RetailerViewHolder viewHolder, final RetailerInfo model, final int position) { 

       viewHolder.setAddress(model.getContactPerson()); 
       viewHolder.setArea(model.getContactNumber()); 
       viewHolder.setShopName(model.getShopName()); 
       viewHolder.setZipcode(model.getZipcode()); 
       viewHolder.setCity(model.getCity()); 


       viewHolder.mView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

//      DatabaseReference ref = getRef(position); 
//      String key= ref.getKey(); 
//      Toast.makeText(Distributors.this, key, Toast.LENGTH_SHORT).show(); 


         ValueEventListener valueEventListener = new ValueEventListener() { 

          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
           RetailerInfo retailerInfo = dataSnapshot.getValue(RetailerInfo.class); 


           Iterator it = retailerInfo.getDistributorInfo().entrySet().iterator(); 
           while (it.hasNext()) { 
            Map.Entry pair = (Map.Entry)it.next(); 
            Log.d("TAG","distributorInfo: "+pair.getKey() + " = " + pair.getValue()); 
            it.remove(); // avoids a ConcurrentModificationException 
           } 
          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         }; 


         mDatabase.addListenerForSingleValueEvent(valueEventListener); 

        } 
       }); 
      } 
     }; 

     recyclerView.setAdapter(adapter); 
    } 

-Code für RetailerInfo: -

public class RetailerInfo { String id, Shopname, Adresse, Stadt, Postleitzahl, Gebiet, Kontaktperson, contactNumber, contact_person_email, location_master, Typ, last_vist, last_visited_by, cityname, salesPersonName; HashMap distributorInfo;

public RetailerInfo() { 
    } 

    public RetailerInfo(String id, String shopName, String address, String city, String zipcode, String area, String contactPerson, String contactNumber, String contact_person_email, String location_master, String type, String last_vist, String last_visited_by, String cityName, String salesPersonName, HashMap<String, String> distributorInfo) { 
     this.id = id; 
     this.shopName = shopName; 
     this.address = address; 
     this.city = city; 
     this.zipcode = zipcode; 
     this.area = area; 
     this.contactPerson = contactPerson; 
     this.contactNumber = contactNumber; 
     this.contact_person_email = contact_person_email; 
     this.location_master = location_master; 
     this.type = type; 
     this.last_vist = last_vist; 
     this.last_visited_by = last_visited_by; 
     this.cityName = cityName; 
     this.salesPersonName = salesPersonName; 
     this.distributorInfo = distributorInfo; 
    } 

    public HashMap<String, String> getDistributorInfo() { 
     return distributorInfo; 
    } 

    public String getId() { 
     return id; 
    } 

    public String getShopName() { 
     return shopName; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public String getCity() { 
     return city; 
    } 

    public String getZipcode() { 
     return zipcode; 
    } 

    public String getArea() { 
     return area; 
    } 

    public String getContactPerson() { 
     return contactPerson; 
    } 

    public String getContactNumber() { 
     return contactNumber; 
    } 

    public String getContact_person_email() { 
     return contact_person_email; 
    } 

    public String getLocation_master() { 
     return location_master; 
    } 

    public String getType() { 
     return type; 
    } 

    public String getLast_vist() { 
     return last_vist; 
    } 

    public String getLast_visited_by() { 
     return last_visited_by; 
    } 

    public String getCityName() { 
     return cityName; 
    } 

    public String getSalesPersonName() { 
     return salesPersonName; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public void setShopName(String shopName) { 
     this.shopName = shopName; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public void setZipcode(String zipcode) { 
     this.zipcode = zipcode; 
    } 

    public void setArea(String area) { 
     this.area = area; 
    } 

    public void setContactPerson(String contactPerson) { 
     this.contactPerson = contactPerson; 
    } 

    public void setContactNumber(String contactNumber) { 
     this.contactNumber = contactNumber; 
    } 

    public void setContact_person_email(String contact_person_email) { 
     this.contact_person_email = contact_person_email; 
    } 

    public void setLocation_master(String location_master) { 
     this.location_master = location_master; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public void setLast_vist(String last_vist) { 
     this.last_vist = last_vist; 
    } 

    public void setLast_visited_by(String last_visited_by) { 
     this.last_visited_by = last_visited_by; 
    } 

    public void setCityName(String cityName) { 
     this.cityName = cityName; 
    } 

    public void setSalesPersonName(String salesPersonName) { 
     this.salesPersonName = salesPersonName; 
    } 
} 

Jede Hilfe oder Vorschlag wird geschätzt. Danke.

+0

google für GSON Parsing Sie werden die Idee bekommen. –

+0

Danke @SohailZahid wird es jetzt versuchen. – anup

+0

@SohailZahid Firebase stellt das unverarbeitete JSON der Datenbankwerte nicht zur Verfügung, daher ist GSON normalerweise ziemlich nutzlos, wenn Sie nicht zuerst von 'DataSnapshot' von Firebase in JSON konvertieren. –

Antwort

1

Sie können zum Beispiel Nest als auch Ihre Objekte:

public class Retailer{ 
    String Address, area, city, contactNumber, contactPerson, shopName, zipCode; 
    DistributorInfo distributorInfo; 

    public Retailer(...){ 
     // Contructor 
    } 
    // Getter and setters 
} 

public class DistributorInfo { 
    // all fields, constructor, getter and setters 
} 

Nutzung:

Retailer retailerInfo = dataSnapshot.getValue(Retailer.class); 
+0

vielen Dank. Bitte überprüfe meine Lösung. – anup

+0

sieht gut aus. Wahrscheinlich wäre es besser, das Objekt direkt anstelle der Felder einzeln zu übergeben, aber ich habe die Absichten zu wenig benutzt, um Ihnen dabei zu helfen – Century

0

Onclick in der populateViewHolder ich den Schlüssel zu getDistributorInfo geben (key). Bitte überprüfen Sie den Code für getDistributorInfo: -

private void getDistributorInfo(String key) { 
DatabaseReference mDistributor = FirebaseDatabase.getInstance().getReference().child("/retailer/"+key+"/distributorInfo"); 

ValueEventListener postListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // Get Post object and use the values to update the UI 
     if (dataSnapshot.exists()) 
     { 
      DistributorInfo post = dataSnapshot.getValue(DistributorInfo.class); 
      Log.d("DistributorInfo", post.getDist_id()); 
      Intent intent = new Intent(Distributors.this, DistributorDetailsActivity.class); 
      intent.putExtra("id", post.getDist_id()); 
      intent.putExtra("shopname", post.getShop_name()); 
      intent.putExtra("address", post.getAddress()); 
      intent.putExtra("city", post.getCity()); 
      intent.putExtra("area", post.getArea()); 
      intent.putExtra("contact_personName", post.getContact_person()); 
      intent.putExtra("contact_personNumber", post.getContact_person_number()); 
      intent.putExtra("contact_personEmail", post.getContact_person_email()); 
      intent.putExtra("zipcode", post.getZipcode()); 
      intent.putExtra("last_visited_by", post.getLast_visited_by()); 
      intent.putExtra("lastVisitedBy", post.getLast_visited_by()); 
      intent.putExtra("cityName", post.getCity()); 
      intent.putExtra("type", "Retailer"); 
      startActivity(intent); 
     }else{ 
      Toast.makeText(Distributors.this, "DistributorInfo is missing.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.d("DistributorInfo", "loadPost:onCancelled", databaseError.toException()); 

    } 
}; 
mDistributor.addValueEventListener(postListener); 


    } 

Danke @FrankvanPuffelen für die Führung.

Verwandte Themen