【问题标题】:How do I retrieve this specific data from firebase into my android studio application listview?如何将这些特定数据从 firebase 检索到我的 android studio 应用程序列表视图中?
【发布时间】:2019-04-16 14:40:52
【问题描述】:

我正在尝试从 google firebase 检索特定于每个登录用户的特定数据。基本上,我要检索的数据是用户 ID 下列出的“字段”数据,但在 google firebase 上的单独类中实时数据库。我希望能够在我的应用程序的活动中的“列表视图”中显示每个字段的数据,但是每当我尝试运行它时,应用程序就会关闭。

我已经尝试在“用户”类的引用下运行应用程序。但这不起作用。我也尝试在“字段”类下运行,但这也不起作用。

这是我的 FarmActivity.java,我希望在其中显示字段数据的“列表视图”。

public class FarmActivity extends AppCompatActivity {


ListView listView;
FirebaseDatabase database;
DatabaseReference ref;
ArrayList<String> list;
ArrayAdapter<String> adapter;
FieldInformation fieldInformation;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_farm);

    listView = (ListView )findViewById(R.id.listView);
    database = FirebaseDatabase.getInstance();
    ref = database.getReference("Fields");
    list = new ArrayList<>();
    adapter = new ArrayAdapter<String>(this, R.layout.user_field_info, R.id.userInfo, list);
    fieldInformation = new FieldInformation();

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds:dataSnapshot.getChildren()){
                fieldInformation = ds.getValue(FieldInformation.class);
                list.add(fieldInformation.getFieldName().toString() + "  " + "\n"+ fieldInformation.getCrop().toString() + "  ");
            }
            listView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

这是我为 FarmActivity 指定字符串的 FieldInformation.java

public class FieldInformation {


public String crop;
public String fieldName;

public FieldInformation(String crop, String fieldName) {

    this.crop = crop;
    this.fieldName = fieldName;

}

public FieldInformation(){

}

public String getCrop() {
    return crop;
}

public void setCrop(String crop) {
    this.crop = crop;
}

public String getFieldName() {
    return fieldName;
}

public void setFieldName(String fieldName) {
    this.fieldName = fieldName;
}
}

【问题讨论】:

  • 如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。请同时添加您的数据库结构。

标签: android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

您的适配器应该有一个列表,并且您的适配器应该有一个接受列表的构造函数。您在 FarmActivity 中使用列表初始化您的适配器并删除您设置的适配器,然后在初始化适配器后设置它,最后放置 adapter.notifydatasetchanged();你在哪里设置你的适配器。随意发布您的适配器,并帮助您修复它。

【讨论】:

  • 感谢您的回复,当您声明“发布适配器”时,我不确定这意味着什么,因为我没有制作适配器,而是在 FarmActivity java 中对其进行了初始化。该列表在您看到的 firebase 上在线。如果方便的话,我可以把整个文件发给你吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 2021-11-06
  • 2020-08-18
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多