Использование FirestoreRecyclerAdapter, но не может запрашивать данные из Firebase - PullRequest
0 голосов
/ 02 февраля 2020

Основываясь на рекомендациях https://github.com/firebase/FirebaseUI-Android/tree/master/firestore, я создаю элементы списка с помощью FirestoreRecyclerAdapter, но не знаю, почему не удалось получить какие-либо данные. Фактически, элементы представления номера отображаются правильно, но содержимое всегда равно нулю. Любой может помочь мне. Ниже приведен исходный код:

Активность:

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

private FirebaseFirestore mDatabase;
private ViewPager mViewPager;

private CollectionReference mOrderRef;
private OrderAdapter mOrderAdapter;

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

    mDatabase = FirebaseFirestore.getInstance();
    mOrderRef = mDatabase.collection("order");
    Query query = mOrderRef.limit(1000);
    FirestoreRecyclerOptions<OrderInfo> options = new FirestoreRecyclerOptions.Builder<OrderInfo>().setQuery(query, OrderInfo.class).build();
    mOrderAdapter = new OrderAdapter(options);

    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view_order_list);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(mOrderAdapter);
}

@Override
protected void onStart() {
    super.onStart();
    mOrderAdapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    mOrderAdapter.stopListening();
}

Адаптер:

    public class OrderAdapter extends FirestoreRecyclerAdapter<OrderInfo, OrderAdapter.OrderHolder> {

    /**
     * Create a new RecyclerView adapter that listens to a Firestore Query.  See {@link
     * FirestoreRecyclerOptions} for configuration options.
     *
     * @param options
     */
    public OrderAdapter(@NonNull FirestoreRecyclerOptions<OrderInfo> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull OrderHolder holder, int position, @NonNull OrderInfo model) {
        holder.txtTitle.setText(String.valueOf(model.getTitle()));
        holder.txtCusName.setText(String.valueOf(model.getCusName()));
        holder.txtDate.setText(String.valueOf(model.getDate()));
    }

    @NonNull
    @Override
    public OrderHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.order_item, parent, false);
        return new OrderHolder(view);
    }


    class OrderHolder extends RecyclerView.ViewHolder{
        TextView txtCusName;
        TextView txtTitle;
        TextView txtDate;

        public OrderHolder(@NonNull View itemView) {
            super(itemView);
            txtCusName = itemView.findViewById(R.id.txt_customer_name);
            txtTitle = itemView.findViewById(R.id.txt_title);
            txtDate = itemView.findViewById(R.id.txt_date);
        }
    }
}

Модель данных:

    public class OrderInfo {

    private String mTitle;
    private String mCusName;
    private String mDate;

    public OrderInfo(){
        //default constructor
    }

    public OrderInfo(String title, String name, String date) {
        this.mTitle = title;
        this.mCusName = name;
        this.mDate = date;
    }

    public String getTitle() {
        return mTitle;
    }

    public String getCusName() {
        return mCusName;
    }

    public void setCusName(String cusName) {
        this.mCusName = cusName;
    }
    public String getDate() {
        return mDate;
    }
}

enter image description here

структура моей базы данных: enter image description here

1 Ответ

1 голос
/ 02 февраля 2020

Ваша модель данных не соответствует структуре базы данных. Попробуйте обновить его, как показано ниже:

public class OrderInfo {

    private String title;
    private String name;
    private String date;

    public OrderInfo(){
        //default constructor
    }

    public OrderInfo(String title, String name, String date) {
        this.title = title;
        this.name = name;
        this.date = date;
    }

    public String getTitle() {
        return title;
    }

    public String getName() {
        return name;
    }

    public String getDate() {
        return date;
    }
}

Кроме того, не забудьте синхронизировать c ваш проект с firebase firestore.

...