Нужна помощь в получении данных из firebase в массив string [].Перепробовал все доступные методы, но застрял с получением только последнего значения - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь получить все значения, хранящиеся в базе данных, в два отдельных массива string [].Я получаю значения, но при отображении их в виде списка он показывает только последнее добавленное значение.Я также использую пользовательский класс адаптера.

Database.child("users").child(mUserId).child("locs").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot ds : dataSnapshot.getChildren()) {

            final String[] main = {(String) ds.child("title").getValue()};
            final String[] sub = {(String) ds.child("addr").getValue()};
            System.out.println(main);//here i am getting 5 outputs like  [Ljava.lang.String;@88b5c49. i have 5 values in firebase too

            CustomAdapter adapter2 = new CustomAdapter(Location.this, main, sub);
            list.setAdapter(adapter2);
        }
    }
});

Пользовательский класс адаптера

public class CustomAdapter extends ArrayAdapter<String>{

    private final Activity context;
    private final String[] main;
    private final String[] sub;
    public CustomAdapter(Activity context,
                         String[] main, String[] sub) {
        super(context, R.layout.layout, main);
        this.context = context;
        this.main = main;
        this.sub = sub;

    }
    @Override
    public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView= inflater.inflate(R.layout.layout, null, true);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.title);
        TextView txtSub=rowView.findViewById(R.id.subtitle);
        txtTitle.setText(main[position]);
        txtSub.setText(sub[position]);
        return rowView;
    }
}

1 Ответ

0 голосов
/ 20 апреля 2019

Попробуйте переместить String[] main, String[] sub за пределы цикла.затем попробуйте добавить все значения в эти массивы внутри цикла.Затем после завершения цикла вызовите эти

CustomAdapter adapter2 = new CustomAdapter(Location.this, main, sub);
list.setAdapter(adapter2);

Весь код должен быть примерно таким:

final String[] main; // declare it with the size it needs.
final String[] sub;  // declare it with the size it needs.              
for(DataSnapshot ds:dataSnapshot.getChildren()) {
   // sum your result to main and sub
}
CustomAdapter adapter2 = new CustomAdapter(Location.this, main, sub);
list.setAdapter(adapter2);                   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...