【问题标题】:No setter/field for while trying to populate a listview on firebase尝试在 firebase 上填充列表视图时没有设置器/字段
【发布时间】:2016-11-29 02:01:12
【问题描述】:

我正在尝试从 firebase 检索数据并使用 firebase-ui 将其显示在我的列表视图中。代码运行良好,但列表视图上没有显示任何内容。这是我从日志中得到的:

W/ClassMapper:在类 com.example.sammie.coreteccontacts.Sacco 上找不到 -KNRXdDOlA9nV6qxXvOl 的设置器/字段

这是我的 FirebaselistAdapter

DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference();
FirebaseListAdapter<Sacco> adapter = new FirebaseListAdapter<Sacco>(getActivity(), Sacco.class, android.R.layout.simple_list_item_1, mDatabaseReference) {
 @Override
protected void populateView(View view, Sacco sacco, int i) {
((TextView)view.findViewById(android.R.id.text1)).setText(Sacco.getName());
}
};
contactList.setAdapter(adapter);

这是我的 Sacco 课:

package com.example.sammie.coreteccontacts;

public class Sacco {

    String description;
    String location;
    static String name;

    public Sacco() {
    }

    public Sacco(String description, String location, String name) {
        this.name = name;
        this.description = description;
        this.location = location;
    }

    public static String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public String getLocation() {
        return location;
    }
}

这是来自 firebase 的数据示例

KNRWnG6BTkbGJQJVq9Qaddclose

description:"测试描述"

位置:“测试位置”

名称:“测试名称”

【问题讨论】:

  • 您需要为Sacco 类中的每个变量添加设置器。例如public void setDescription(String description){ this.description = description; }。此外,如果 name 对对象来说是唯一的,您可能不希望它是 static
  • 我已经添加了设置器,但仍然遇到同样的错误

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


【解决方案1】:

您的类中没有设置方法。

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

public void setDescription(String description) {
    this.description = description;
}

public void setLocation(String location) {
    this.location = location;
}

但是

-KNRWnG6BTkbGJQJVq9Qaddclose

这是一个唯一键,将作为包含您的描述、位置和名称的对象获取。

W/ClassMapper:在类上找不到 -KNRXdDOlA9nV6qxXvOl 的设置器/字段 com.example.sammie.coreteccontacts.Sacco

这表明您的数据库侦听器的定位存在错误。它正在读取 -KNRWnG6BTkbGJQJVq9Qaddclose 作为 Sacco 类的变量,而不是它的对象。

请检查 JSON 文件和 DatabaseReference。很可能应该是这样的:

  • UnderChilds (儿童听众)。
    • -KNRWnG6BTkbGJQJVq9Qaddclose
    • -KNRWnSYnuojkbGJQJVq9Qaddclos

【讨论】:

  • 让我试试这个,我会回复你的
  • 我意识到我在 Sacco 类上调用 getName() 方法,所以我将其更改为在 sacco 对象上调用 getName() ((TextView)view.findViewById(android.R.id.text1)).setText(sacco.getName()); 我将 setters 方法添加到 Sacco 类然后更改名称变量为非静态但我仍然得到同样的错误我该如何实现这个This shows that there is an error with your database listener's positioning. It is reading -KNRWnG6BTkbGJQJVq9Qaddclose as a variable to your Sacco class instead of an object of it.
  • 你在哪里添加数据库监听器,在哪个节点上?另外,请以 JSON 结构为例
  • link 这是我的 JSON 结构的概述,我认为问题在于数据的结构,我想我必须在获取数据库引用后实现一个子侦听器,你能请就此提出建议。
  • 是的,我检查了您的数据。你应该把ChildEventListener放在coretec-contacts上,然后你可以在里面使用Sacco ob = dataSnapshot.getvalue(Sacco.class);
【解决方案2】:

你必须得到你的节点的引用:

DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Your Node Name");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多