Модель Firebase POJO getter возвращает ноль в FirebaseRecyclerAdapter - PullRequest
1 голос
/ 16 марта 2019

У меня есть FirebaseRecyclerAdapter, извлекающий данные из базы данных firebase, но когда я пытаюсь получить доступ к данным firebase, метод получения POJO возвращает ноль.Я могу получить ссылочный ключ базы данных.

    final Query beveragesQuery = mDatabaseReference.child(FirebaseValues.PRODUCTS)
                    .child(FirebaseValues.BEVERAGES);
            FirebaseRecyclerOptions<GenericProductModel> beveragesOptions =
                    new FirebaseRecyclerOptions.Builder<GenericProductModel>()
                            .setQuery(beveragesQuery, GenericProductModel.class)
                            .build();
            adapter = new FirebaseRecyclerAdapter<GenericProductModel, Combos.MovieViewHolder>(
                    beveragesOptions
            ) {
                @NonNull
                @Override
                public Combos.MovieViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.cards_cardview_layout, parent, false);
                    return new Combos.MovieViewHolder(view);
                }

                @Override
                protected void onBindViewHolder(@NonNull Combos.MovieViewHolder viewHolder, int position, @NonNull GenericProductModel model) {
                    Log.d(TAG, "Item received:"+getRef(position).getKey());
String json = new Gson().toJson(model);
                Log.d(TAG, "Item received:"+ json);
                Log.d(TAG, "Item received:"+ model.toString());
                    if (tv_no_item.getVisibility() == View.VISIBLE) {
                        tv_no_item.setVisibility(View.GONE);
                    }
                    Log.d(TAG, "card name:"+model.getCardname());
                    viewHolder.cardname.setText(model.getCardname());
                    viewHolder.cardprice.setText("₹ " + Float.toString(model.getCardprice()));
                    Picasso.get().load(model.getCardimage()).into(viewHolder.cardimage);

                    viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(Beverages.this, IndividualProduct.class);
                            intent.putExtra("product", getItem(position));
                            startActivity(intent);
                        }
                    });
                }
                @Override
                public void onError(DatabaseError e) {
                    Log.e(TAG, "RV Adapter, Error occurred: " + e.getMessage());
                }
                };
            mLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);

            mRecyclerView.setLayoutManager(mLayoutManager);
            adapter.startListening();
            mRecyclerView.setAdapter(adapter);
        }

Мой класс POJO или модели

public class GenericProductModel implements Serializable {

    public int cardid;
    public String cardname;
    public String cardimage;
    public String carddescription;
    public float cardprice;

    public GenericProductModel() {
    }

    public GenericProductModel(int cardid, String cardname, String cardimage, String carddescription, float cardprice) {
        this.cardid = cardid;
        this.cardname = cardname;
        this.cardimage = cardimage;
        this.carddescription = carddescription;
        this.cardprice = cardprice;
    }

    public int getCardid() {
        return cardid;
    }

    public String getCardname() {
        return cardname;
    }

    public String getCardimage() {
        return cardimage;
    }

    public String getCarddescription() {
        return carddescription;
    }

    public float getCardprice() {
        return cardprice;
    }

    public void setCardid(int cardid) {
        this.cardid = cardid;
    }

    public void setCardname(String cardname) {
        this.cardname = cardname;
    }

    public void setCardimage(String cardimage) {
        this.cardimage = cardimage;
    }

    public void setCarddescription(String carddescription) {
        this.carddescription = carddescription;
    }

    public void setCardprice(float cardprice) {
        this.cardprice = cardprice;
    }
}

Я реализую Serializable, потому что я отправляю эти данные как намерение для другой деятельности,

Добавлены некоторые дополнительные параметры журнала для ясности Когда я запускаю приложение, вывод журнала, который я получаю:

03-17 15:05:55.200 4501-4501/com.vdeveloper.chaisutta D/BeveragesTAG: Item received, received:1
03-17 15:05:55.227 4501-4501/com.vdeveloper.chaisutta D/BeveragesTAG: Item received:{"a":0,"e":0.0}
03-17 15:05:55.227 4501-4501/com.vdeveloper.chaisutta D/BeveragesTAG: Item received:com.vdeveloper.chaisutta.b.a@63d3fc
03-17 15:05:55.227 4501-4501/com.vdeveloper.chaisutta D/BeveragesTAG: card name:null

Снимок экрана базы данных: enter image description here

Ответы [ 2 ]

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

Я нашел решение сам.Проблема была с моим POJO.Поскольку этот проект был на androidx, мне нужно добавить аннотацию «@Keep», чтобы компилятор не удалял методы, которые он считает избыточными.

import java.io.Serializable;

import androidx.annotation.Keep;

@Keep
public class GenericProductModel implements Serializable {

    public int cardid;
    public String cardname;
    public String cardimage;
    public String carddescription;
    public float cardprice;

    public GenericProductModel() {
    }

    public GenericProductModel(int cardid, String cardname, String cardimage, String carddescription, float cardprice) {
        this.cardid = cardid;
        this.cardname = cardname;
        this.cardimage = cardimage;
        this.carddescription = carddescription;
        this.cardprice = cardprice;
    }

    public int getCardid() {
        return cardid;
    }

    public String getCardname() {
        return cardname;
    }

    public String getCardimage() {
        return cardimage;
    }

    public String getCarddescription() {
        return carddescription;
    }

    public float getCardprice() {
        return cardprice;
    }

    public void setCardid(int cardid) {
        this.cardid = cardid;
    }

    public void setCardname(String cardname) {
        this.cardname = cardname;
    }

    public void setCardimage(String cardimage) {
        this.cardimage = cardimage;
    }

    public void setCarddescription(String carddescription) {
        this.carddescription = carddescription;
    }

    public void setCardprice(float cardprice) {
        this.cardprice = cardprice;
    }
}

Спасибо всем за помощь

0 голосов
/ 16 марта 2019

Вы получаете null, потому что все ваши значения null, так как вы возвращаете в каждом получателе this.fieldName вместо fieldName. Чтобы решить эту проблему, измените ваши получатели на:

public int getCardid() {
    return cardid;
}

public String getCardname() {
    return cardname;
}

public String getCardimage() {
    return cardimage;
}

public String getCarddescription() {
    return carddescription;
}

public float getCardprice() {
    return cardprice;
}

Видите, больше нет this.

...