Запросы из окна просмотра не загружают данные в некоторых позициях - PullRequest
0 голосов
/ 06 июня 2019

У меня относительно простая настройка просмотра переработчика.В моем фрагменте я запрашиваю пожарный магазин, чтобы получить некоторые предварительно выбранные значения, введенные пользователем.Одним из этих значений на самом деле является идентификатор коллекции в другой коллекции в том же экземпляре Firebase, который ссылается на название ресторана.Я не хочу показывать идентификатор, а скорее название ресторана, к которому относится идентификатор.

Теперь в методе viewholder я запрашиваю эту другую коллекцию, чтобы получить название ресторана.

Вотчасть моего первоначального запроса:

mealplanDetailsArrayList = new ArrayList<>();
        mealplanReference = firebaseFirestore.collection("Customer_Data").document(userId).collection("Meal_Plans");

        mealplanReference.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                for (QueryDocumentSnapshot document : queryDocumentSnapshots) {
                    MealplanDetails mealplanDetails = document.toObject(MealplanDetails.class);
                    mealplanDetailsArrayList.add(mealplanDetails);

                    mealPlanDetailsAdapter = new MealPlanDetailsAdapter(mealplanContext, mealplanDetailsArrayList);
                    mealplanRecycler.setAdapter(mealPlanDetailsAdapter);
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.d(TAG, "on failure error:"+e);
            }
        });

А вот мой адаптер:

public class MealPlanDetailsAdapter extends RecyclerView.Adapter<MealPlanDetailsAdapter.MealPlanDetailsViewHolder> {

    private Context adapterContext;
    private ArrayList<MealplanDetails> mealplanDetailsArrayList;
    private String restaurantName;

    private final static String TAG = MealPlanDetailsAdapter.class.getSimpleName();

    public MealPlanDetailsAdapter(Context adapterContext, ArrayList<MealplanDetails> mealplanDetailsArrayList) {
        this.mealplanDetailsArrayList = mealplanDetailsArrayList;
        this.adapterContext = adapterContext;
    }

    @NonNull
    @Override
    public MealPlanDetailsAdapter.MealPlanDetailsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater layoutInflater = LayoutInflater.from(adapterContext);
        View view = layoutInflater.inflate(R.layout.mealplan_card, viewGroup, false);
        return new MealPlanDetailsViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MealPlanDetailsAdapter.MealPlanDetailsViewHolder mpDetailsViewHolder, int position) {

        // Set restaurant name
        mpDetailsViewHolder.tvRestaurant.setText(getRestaurantName(mealplanDetailsArrayList.get(position).getRestaurantId()));
        Log.d(TAG, "restaurantId:" + mealplanDetailsArrayList.get(position).getRestaurantId() + " " + position);

    }

    private String getRestaurantName(final String restaurantId) {
        FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
        CollectionReference restaurantReference = firebaseFirestore.collection("Restaurant_Data");
        restaurantReference.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                    if (documentSnapshot.getId().equals(restaurantId)) {
                        restaurantName = documentSnapshot.getString("restaurantName");
                    }
                }
            }
        });
        return restaurantName;
    }

    @Override
    public int getItemCount() {
        return mealplanDetailsArrayList.size();
    }

    class MealPlanDetailsViewHolder extends RecyclerView.ViewHolder {

        public TextView tvRestaurant;

        public MealPlanDetailsViewHolder(@NonNull View itemView) {
            super(itemView);

            tvRestaurant = itemView.findViewById(R.id.tv_restaurant);
        }
    }
}

Я удалил некоторые другие данные, которые загружаю в видоискатель без проблем дляради простоты, но происходит то, что в некоторых позициях название ресторана, которое я получаю из запроса (который я провожу в классе адаптеров), не отображается.Это текстовое представление выглядит пустым.

Есть идеи, почему это происходит и как я могу обойти это?

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