【问题标题】:Spinner not populating from Firebase微调器未从 Firebase 填充
【发布时间】:2019-03-01 21:37:08
【问题描述】:

使用下面的代码没有错误,但数据不显示。

任何帮助将不胜感激,因为我是初学者并且不知道如何解决这个问题。

如果能提供这个解决方案的代码也很好。

public class AddReviewActivity extends AppCompatActivity {

    Spinner companyNameSpinner;
    ArrayList<String> companies = new ArrayList<>();
    DatabaseReference databaseReference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_review);

        databaseReference = FirebaseDatabase.getInstance().getReference("Company");
        companyNameSpinner = (Spinner) findViewById(R.id.companyNameSpinner);
        DatabaseReference mref = databaseReference.child("name");

        FirebaseListAdapter<String> firebaseListAdapter = new FirebaseListAdapter<String>(this, String.class, android.R.layout.simple_spinner_item, mref) {
            @Override
            protected void populateView(View v, String model, int position) {
                ((TextView)findViewById(android.R.id.text1)).setText(model);
            }
        };
        companyNameSpinner.setAdapter(firebaseListAdapter);
    }

【问题讨论】:

  • 你在哪里打电话给adapter.startListening()?见stackoverflow.com/questions/47228262/…
  • 你试过用new FirebaseListAdapter&lt;String&gt;(this, String.class, android.R.layout.simple_spinner_item, databaseReference)?
  • 它不会工作,因为孩子不是字符串,但是使用 thad 节点是正确的

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


【解决方案1】:

doc推荐建设者

//Please notice Im using databaseReference and Company
//More details further
FirebaseListOptions<Company> options = new FirebaseListOptions.Builder<Company>()
        .setQuery(databaseReference, Company.class)
        .setLifeCycleOwner(this);
        .build();
        //Frank van Puffelen coment is right, you have to start listening some how

你不能

mref = databaseReference.child("name");

并期望得到公司名称列表,不等同于 SQL select column

您需要创建一个代表公司的 POJO

public class Company {

    private String name;
    //TODO other attributes
    //TODO getters and seters
    //TODO default constructor
}

现在你可以初始化适配器了:

FirebaseListAdapter<Company> adapter = new FirebaseListAdapter<Company>(options) {...

当您尝试使用 general 将数据设置到行时,findViewById 将不起作用,因为您的适配器是抽象类的内部实现,您正在访问 Activity 父级方法。 您必须使用视图

protected void populateView(View v, Company model, int position) {
TextView tv = (TextView) view;
view.setText(model.getName());
}

我不知道这是否应该与 Spinner 一起使用是 ListView 的替代品。

为了进一步发展,您必须学习如何调试,在这种情况下,第一步是在 populateView 方法中添加一个日志

Log.d("COOL_TAG", model);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多