Как получить все значения из Firebase? - PullRequest
1 голос
/ 19 марта 2019

БАЗА ДАННЫХ

enter image description here

Я хотел получить все значения из моей базы данных, но он получил только последнее, которое называется "hjh", что я сделал не так?

Это мой код

public class MainActivity extends AppCompatActivity {

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("content");
ArrayList<String> postList = new ArrayList<>();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference contentRef = rootRef.child("Post");
ValueEventListener value_l;
TextView content_view;
ListView listview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    //setContentView(R.layout.post_info);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    content_view = (TextView) findViewById(R.id.contentTextview);
    listview = (ListView) findViewById(R.id.listview);


    value_l = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot ds: dataSnapshot.getChildren()){
                String contentText = ds.child("content").getValue(String.class);
                postList.add(contentText);
                //FOR ARRAYLIST TESTING content_view.setText(postList.get(postList.size()-1));
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) { }
    };

Спасибо:)

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Вы должны попробовать этот код, он может вам помочь.

1) MainActivity

public class MainActivity extends AppCompatActivity {

    private RecyclerView rvData;
    private RetriveDataAdapter adapter;

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

        rvData = findViewById(R.id.rvData);
        rvData.setHasFixedSize(true);
        rvData.setLayoutManager(new LinearLayoutManager(MainActivity.this));

        DatabaseReference database = FirebaseDatabase.getInstance().getReference();

        database.child("Post").addValueEventListener(new ValueEventListener() {
            @SuppressLint("LongLogTag")
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<MyBean> arrayList = new ArrayList<MyBean>();
                for (DataSnapshot noteDataSnapshot : dataSnapshot.getChildren()) {
                    MyBean bean = noteDataSnapshot.getValue(MyBean.class);
                    arrayList.add(bean);
                }
                Log.e("MainActivity.this", "Data list ::>>>>>" + arrayList.size());
                adapter = new RetriveDataAdapter(MainActivity.this, arrayList);
                rvData.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

2) MyBean

public class MyBean {

    public String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

3) RetriveDataAdapter

public class RetriveDataAdapter extends RecyclerView.Adapter<RetriveDataAdapter.MyViewHolder> {

    private static final String TAG = "RetriveDataAdapter.class";
    private Context ctx;
    private ArrayList<MyBean> dataList;

    @SuppressLint("LongLogTag")
    public RetriveDataAdapter(Context context, ArrayList<MyBean> dataList) {
        this.ctx = context;
        this.dataList = dataList;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView tvContent;

        public MyViewHolder(View view) {
            super(view);

            tvContent = view.findViewById(R.id.tvContent);
        }
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_form, parent, false);
        return new MyViewHolder(itemView);
    }

    @SuppressLint("LongLogTag")
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
         final MyBean bean = dataList.get(position);

        holder.tvContent.setText("Content: " + bean.getContent());
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }
}
0 голосов
/ 19 марта 2019

Я не вижу всей структуры вашей базы данных и не видел, куда вы звоните addValueEventListener(value_l), так что я могу только догадываться, что это из-за неправильного уровня Reference.

Вы должны добавить value_l к правильной ссылке, возможно, ко всему родительскому посту, и перебрать все его дочерние элементы, используя snapshot.forEach()

Google для firebase database iterate может предоставить более подробную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...