我想知道如何从零售商处检索distributorInfo。我正在尝试从FirebaseRecyclerAdapter的populateViewHolder方法中检索distributorInfo。我能够获取所选项目的密钥。如何获取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);
}
RetailerInfo代码: -
public class RetailerInfo { String id,shopName,address,city,zipcode,area,contactPerson,contactNumber,contact_person_email,location_master,type,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;
}
}
感谢任何帮助或建议。谢谢。
答案 0 :(得分:1)
您也可以嵌套对象:
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
}
用法:
Retailer retailerInfo = dataSnapshot.getValue(Retailer.class);
答案 1 :(得分:1)
在populateViewHolder内部Onclick我将密钥传递给getDistributorInfo(key)。请检查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);
}
感谢@FrankvanPuffelen的指导。