'W/Firestore: [CustomClassMapper]: No setter/field for class Android

I was trying to load data from Documents class using Recyclerview, but the error appear on logcat "W/Firestore: (21.1.1) [CustomClassMapper]: No setter/field for Document Name found on class id.MuhammadRafi.StockCount.Documents". By the way, where is my fault?

My Firestore Database

Documents field

Documents.class :

public class Documents extends DocumentID {
    String documentName;
    String documentDate;
    String inspectorName;
    String marketLocation;

public Documents() {

}

public Documents(String documentName, String documentDate, String inspectorName, String marketLocation) {
    this.documentName = documentName;
    this.documentDate = documentDate;
    this.inspectorName = inspectorName;
    this.marketLocation = marketLocation;
}

public String getDocumentName() {
    return documentName;
}

public String getDocumentDate() {
    return documentDate;
}

public String getInspectorName() {
    return inspectorName;
}

public String getMarketLocation() {
    return marketLocation;
}

public void setDocumentName(String documentName) {
    this.documentName = documentName;
}

public void setDocumentDate(String documentDate) {
    this.documentDate = documentDate;
}

public void setInspectorName(String inspectorName) {
    this.inspectorName = inspectorName;
}

public void setMarketLocation(String marketLocation) {
    this.marketLocation = marketLocation;
}
}

DocumentList.class :

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class DocumentList extends RecyclerView.Adapter<DocumentList.ViewHolder> {
    private List<Documents> documentsList;
    private Context context;

public DocumentList(Context context, List<Documents> documentsList) {
    this.documentsList = documentsList;
    this.context = context;
}

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

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Documents adapterDocuments = documentsList.get(position);

    holder.textViewDocumentName.setText(adapterDocuments.getDocumentName());
    holder.textViewDate.setText(adapterDocuments.getDocumentDate());
    holder.textViewInspector.setText(adapterDocuments.getInspectorName());
    holder.textViewLocation.setText(adapterDocuments.getMarketLocation());
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    public TextView textViewDocumentName, textViewLocation, textViewInspector, textViewDate;

    public ViewHolder(View itemView) {
        super(itemView);

        textViewDocumentName = itemView.findViewById(R.id.textNameDocument);
        textViewLocation = itemView.findViewById(R.id.textLocation);
        textViewInspector = itemView.findViewById(R.id.textInspector);
        textViewDate = itemView.findViewById(R.id.textDocumentDate);
    }
}
}

StartCounting.class :

public class StartCounting extends AppCompatActivity {
    private DocumentList documentListAdapter;
    private RecyclerView recyclerViewDocument;
    private RecyclerView.LayoutManager layoutManager;
    private FirebaseFirestore firebaseFirestore;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_counting);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    firebaseFirestore = FirebaseFirestore.getInstance();

    documentsList = new ArrayList<>();
    documentListAdapter = new DocumentList(getApplicationContext(), documentsList);

    recyclerViewDocument = findViewById(R.id.recyclerViewDocument);
    recyclerViewDocument.setHasFixedSize(true);

    layoutManager = new LinearLayoutManager(this);
    recyclerViewDocument.setLayoutManager(layoutManager);

    recyclerViewDocument.setAdapter(documentListAdapter);

protected void onStart() {
    super.onStart();

    firebaseFirestore.collection("Users").document(currentUser.getUid()).collection("Documents").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()) {
                for(DocumentSnapshot documentSnapshot : task.getResult()) {
                    Documents documents = documentSnapshot.toObject(Documents.class);
                    documentsList.add(documents);

                    documentListAdapter.notifyDataSetChanged();
                }
            }
        }
    });


Solution 1:[1]

The problem in your code lies in the fact that the name of the fields in your Documents class are different than the name of the properties in your database. You have in your Documents class four fields named documentName, documentDate, inspectorName, marketLocation while in the database I see that the names are different, Document Name, Document Date, Inspector Name and Market Location and this is not correct. The names must match.

You have two solutions. The first one would to change the name of your fieds in the Documents class according to what it already exists in the database or you can use an annotation in front of the getters like this:

@PropertyName("Document Name")
public String getDocumentName() {
    return documentName;
}

Solution 2:[2]

Basically if You want turn Your document into a data class, Your data class fields should be named the same as Your firestore fields. So if in Your data class You have documentName, your firestore should have a variable named documentName, and not Document Name.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Micha? Moso?