How to retrieve my data inside the random key?

自闭症网瘾萝莉.ら 提交于 2019-12-25 01:27:32

问题


I want to get the data inside the random key, as shown here:

I am using Firebase and I have tried a lot of things, but I cannot solve this.

public class MainActivity extends AppCompatActivity {

    public RecyclerView recyclerView , recyclerView1 ;
    public DatabaseReference ref;

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

        {
            ref = FirebaseDatabase.getInstance().getReference().child("Requests");
            recyclerView = (RecyclerView) findViewById(R.id.recycler_food);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));

            FirebaseRecyclerAdapter<Food, FoodViewHolder> adapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(
                    Food.class,
                    R.layout.individual_row,
                    FoodViewHolder.class,
                    ref
            ) {
                @Override
                protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {

                    viewHolder.setProductName(model.getProductName());
                    viewHolder.setQuantity(model.getQuantity());

                }
            };
            LinearLayoutManager layoutManager
                    = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
            recyclerView.setAdapter(adapter);
        }

        ref = FirebaseDatabase.getInstance().getReference().child("Requests");
        recyclerView1 = (RecyclerView) findViewById(R.id.recycler_foods);
        recyclerView1.setHasFixedSize(true);
        recyclerView1.setLayoutManager(new LinearLayoutManager(this));

        FirebaseRecyclerAdapter<Food, FoodViewHolder> adapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(
                Food.class,
                R.layout.individual_row,
                FoodViewHolder.class,
                ref
        ) {
            @Override
            protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {

                viewHolder.setProductName(model.getProductName());
                viewHolder.setQuantity(model.getQuantity());

            }
        };
        LinearLayoutManager layoutManager
                = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
        recyclerView1.setAdapter(adapter);
    }

    public static class FoodViewHolder extends RecyclerView.ViewHolder {

        TextView text_productName , text_quantity , text_customername;
        public FoodViewHolder(View itemView) {
            super(itemView);
            text_productName = (TextView) itemView.findViewById(R.id.food_name);
            text_quantity = (TextView) itemView.findViewById(R.id.food_qty);


        }

        public void setProductName(String productName) {
            text_productName.setText(productName);

        }

        public void setQuantity(String quantity) {
                text_quantity.setText(quantity);

        }
    }

回答1:


You're creating an adapter on Requests. That means that the recycler view will show a list of requests: so one row for each request. But you created a data class Food and a FoodViewHolder, so it seems you actually want to display a list of foods.

To display a list of foods in your recycler view, you must have a list of foods in your database. For example, you can show the foods for the first request by determining the DatabaseReference to that request and then showing that in the adapter:

DatabaseReference requestsRef = FirebaseDatabase.getInstance().getReference().child("Requests");
Query firstRequestQuery = requestsRef.orderByKey().limitToFirst(1);
firstRequestQuery.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot requestSnapshot: dataSnapshot.getChildren()) {
        FirebaseRecyclerAdapter<Food, FoodViewHolder> adapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(
                Food.class,
                R.layout.individual_row,
                FoodViewHolder.class,
                requestSnapshot.getRef().child("foods")
        ) {
            @Override
            protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {
                viewHolder.setProductName(model.getProductName());
                viewHolder.setQuantity(model.getQuantity());
            }
        };
        recyclerView.setAdapter(adapter);
    }
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    throw databaseError.toException();
  }
}

While there may be some problems with the code, it demonstrates how to show the foods of the first request in the recycler view. The key is requestSnapshot.getRef().child("foods"), which ensures the adapter loads the foods of the first request.



来源:https://stackoverflow.com/questions/52344827/how-to-retrieve-my-data-inside-the-random-key

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!