Spinner не заполняется из Firebase - PullRequest
0 голосов
/ 02 марта 2019

С кодом ниже нет ошибок, но данные не отображаются.

Любая помощь будет принята с благодарностью, так как я новичок и не знаю, как это исправить.

Было бы также хорошо, если бы можно было предоставить код для этого решения.

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);
    }

Firebase Data

1 Ответ

0 голосов
/ 02 марта 2019

В 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. Вы должны использовать View .

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

Я не знаю, должно ли это работать с Spinner is-for для ListView.

Для дальнейшего роста вы должны научиться отлаживать, в этом случае первым шагом будет добавление журнала внутри populateView метода

Log.d("COOL_TAG", model);
...