使用下面的代码没有错误,但数据没有显示。
任何帮助将非常感谢,因为我是一个初学者,不知道如何解决这个问题。
如果可以提供此解决方案的代码也会很棒。
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);
}
在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) {...
当您尝试使用常规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);