问题
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