【问题标题】:Populate ListView with Firebase Adapter使用 Firebase 适配器填充 ListView
【发布时间】:2016-11-12 02:24:34
【问题描述】:

当我尝试使用 firebase UI 使用 firebase 适配器填充列表视图时收到这些错误

com.google.firebase.database.DatabaseException:转换失败 java.util.HashMap 类型的值到 String com.google.firebase.database.DatabaseException:类 java.util.HashMap 有泛型类型参数,请使用 而是 GenericTypeIndicator

这里是代码

     DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
     DatabaseReference a = ref.child("info");

        final FirebaseListAdapter<String> adapter =
              new FirebaseListAdapter<String>(this,String.class,android.R.layout.simple_list_item_1,a) {
                  @Override
                  protected void populateView(View v, String model, int position) {

                      TextView text = (TextView) findViewById(android.R.id.text1);
                      text.setText(model);

                  }

这里是一个json数据的例子

 "info" : {
   "KSTUJILdwPN305Fs7ujhga4knlG3" : {
     "File Info" : {
       "-JFRkA855rfOU7GtcK4" : {
         "Name" : "John",
         "Adress" : "Test Adress",
         "Favourite_food" : "Bread",
       },

【问题讨论】:

  • 您能否在a 位置显示一个 JSON 的小示例(作为文本,请不要截图)?您可以通过从 Firebase 数据库控制台导出它来获取它。
  • 好的,我用 json 数据示例更新了问题

标签: java android listview firebase-realtime-database firebaseui


【解决方案1】:

info 节点不引用您的数据模型。它可能包含子节点。所以要达到模型,你应该使用这样的参考。

 DatabaseReference a = ref.child("info").child(info_id).child("File Info").child(file_id); 

你应该有一个 FileInfo 模型而不是 String 模型来使用

populateView(View v, FileInfo model, int position):

和模型

public class FileInfo {

private String Name;
private String Adress;
private String Favourite_food;

public FileInfo() {
}

public FileInfo(String Name, String Adress, String Favourite_food) {
    this.Name = Name;
    this.Adress = Adress;
    this.Favourite_food = Favourite_food;
}

public String getName() {
    return Name;
}

public void setName(String Name) {
    this.Name = Name;
}

public String getAdress() {
    return Adress;
}

public void setAdress(String Adress) {
    this.Adress = Adress;
}

public String getFavourite_food() {
    return Favourite_food;
}

public void setFavourite_food(String Favourite_food) {
    this.Favourite_food = Favourite_food;
}

}

【讨论】:

    【解决方案2】:
    final FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(this,String.class,android.R.layout.simple_list_item_1,a)
    
    public FirebaseListAdapter(Activity activity,
                   java.lang.Class<T> modelClass,
                   int modelLayout,
                   com.firebase.client.Firebase ref)
    

    modelClass - Firebase 会将某个位置的数据编组到您提供的类的实例中

    将构造函数的第二个参数 (String.class) 替换为带有来自 info (name, address, favouriteFood) 字段的 POJO

    FirebaseListAdapter

    编辑:

    您还应该在 populateView 方法中使用 getter

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2018-02-10
      • 2014-07-23
      • 2017-08-21
      • 1970-01-01
      • 2018-08-27
      相关资源
      最近更新 更多