Разбор проблемы с идентификатором FirebaseRecyclerAdapter

Я пытаюсь разобрать следующий JSON с помощью Firebase:

   {
          "organizations" : {
            "-KS5bLCjQmNSQZDIQkTE" : {
              "about" : {
                "address" : "teka",
                "city" : "sns",
                "country" : "South Africa",
                "created_at" : 1474358502482,
                "name" : "diverse",
                "pincode" : "167377",
                "state" : "punjab",
                "utc" : "2016-09-20 08:01:41"
              },
              "department" : {
                "-KS9LUpZWo5UqtWKJwJ8" : {
                  "address" : "best",
                  "name" : "test"
                }
              }
            }
          }
   }

Вот мой код Java:

@IgnoreExtraProperties
public class Organizations  {

  About about;
  Department department;

   public String getDepartment() {
     return department;
   }

   public static class Department{
      public String address;
      public String name;

      public String getName() {
       return name;
      }

     public String getAddress() {
       return address;
     }

   }

}

FirebaseRecyclerAdapter

 fbOrganizationRecycleAdapter = new FirebaseRecyclerAdapter<Organizations, OrganizationHolder>
                (Organizations.class, R.layout.list_items_orgnization,OrganizationHolder.class,lastFifty) 
                {
                     @Override 
                     protected void populateViewHolder(OrganizationHolder viewHolder, final Organizations model, int position) {
                        Log.e(TAG, "test " + model.getDepartment().getName());
                     }
                };

Все анализируется нормально, кроме Department. Он возвращает мне null department, когда я пытаюсь получить model.getDepartment().getName();.

Если данные похожи на следующий JSON, все работает нормально:

   {
          "organizations" : {
            "-KS5bLCjQmNSQZDIQkTE" : {
              "about" : {
                "address" : "teka",
                "city" : "sns",
                "country" : "South Africa",
                "created_at" : 1474358502482,
                "name" : "diverse",
                "pincode" : "167377",
                "state" : "punjab",
                "utc" : "2016-09-20 08:01:41"
              },
              "department" : {

                  "address" : "best",
                  "name" : "test"

              }
            }
          }
   }

Я думаю, что проблема с ID. Пожалуйста, дайте мне знать, как проанализировать ID "-KS9LUpZWo5UqtWKJwJ8" из следующего JSON:

 "department" : {
            "-KS9LUpZWo5UqtWKJwJ8" : {
              "address" : "best",
              "name" : "test"
            }
          }

person Munish Kapoor    schedule 21.09.2016    source источник
comment
Укажите минимальный код, который воспроизводит проблему. В настоящее время мы не знаем, как выглядит класс Department и как вы на самом деле читаете данные (с помощью какого-либо слушателя или как вы устанавливаете ссылку для адаптера).   -  person Frank van Puffelen    schedule 21.09.2016
comment
Вы можете написать JsonDeserializer или TypeAdapterFactory, чтобы проанализировать его самостоятельно. Вот хороший пример от Джесси Уилсона (участник Gson) stackoverflow.com/a/11272452/1726166   -  person ytRino    schedule 21.09.2016


Ответы (1)


Попробуй это:

class DepartmentChild{
   public String address;
   public String name;

   public String getName(){
      return this.name;  
   }
}

public class Organizations  {
  public About about;
  public Map<String,DepartmentChild>  department;

  public Map<String, DepartmentChild> getDepartment() {
    return department;
  }

  public void setDepartment(Map<String, DepartmentChild> department){
    this.department = department;
  }
}

Пример

void test(Organizations model){
   for (Map.Entry<String, DepartmentChild > entry : model. getDepartment().entrySet()) {
      Log.e(TAG, "test " + entry.getKey()+ "/" + entry.getValue().getName());
   }
}

Вы можете повторить карту следующим образом:

for (Map.Entry<String, DepartmentChild> entry : department.entrySet())
{
  System.out.println(entry.getKey() + "/" + entry.getValue().getName());
}
person Andres Vasquez Agramont    schedule 21.09.2016
comment
Спасибо за ваш ответ. Как я использую объект отдела, чтобы получить имя - person Munish Kapoor; 21.09.2016
comment
Имя строки = Department.getValue(-KS9LUpZWo5UqtWKJwJ8).name; - person Andres Vasquez Agramont; 21.09.2016
comment
Department.getValue Студия Android не отображает мне метод getValue - person Munish Kapoor; 21.09.2016