Java W/Firestore:[CustomClassMapper]:Android类没有设置器/字段
我试图使用Recyclerview从Documents类加载数据,但错误出现在logcat“W/Firestore:(21.1.1)[CustomClassMapper]:在类id.MuhammadRafi.StockCount.Documents上找不到文档名的setter/字段”。顺便问一下,我的错在哪里 文件类别:Java W/Firestore:[CustomClassMapper]:Android类没有设置器/字段,java,android,firebase,android-recyclerview,google-cloud-firestore,Java,Android,Firebase,Android Recyclerview,Google Cloud Firestore,我试图使用Recyclerview从Documents类加载数据,但错误出现在logcat“W/Firestore:(21.1.1)[CustomClassMapper]:在类id.MuhammadRafi.StockCount.Documents上找不到文档名的setter/字段”。顺便问一下,我的错在哪里 文件类别: public class Documents extends DocumentID { String documentName; String docume
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);
}
}
}
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入androidx.recyclerview.widget.recyclerview;
导入java.util.List;
公共类DocumentList扩展了RecyclerView.Adapter{
私人清单文件清单;
私人语境;
公共文档列表(上下文,列表文档列表){
this.documentsList=documentsList;
this.context=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.list\u document\u布局,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
文档适配器文档=documentsList.get(位置);
holder.textViewDocumentName.setText(adapterDocuments.getDocumentName());
holder.textViewDate.setText(adapterDocuments.getDocumentDate());
holder.textViewInspector.setText(adapterDocuments.getInspectorName());
holder.textViewLocation.setText(adapterDocuments.getMarketLocation());
}
@凌驾
public int getItemCount(){
返回文档list.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图文本视图文档名称、文本视图位置、文本视图检查器、文本视图日期;
公共视图持有者(视图项视图){
超级(项目视图);
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();
}
}
}
});
公共类StartCounting扩展了AppCompative活动{
私有文档列表文档列表适配器;
私人回收站查看回收站文档;
private RecyclerView.LayoutManager LayoutManager;
私人FirebaseFirestore FirebaseFirestore;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u start\u counting);
此.setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Graphic);
firebaseFirestore=firebaseFirestore.getInstance();
documentsList=新的ArrayList();
documentListAdapter=新文档列表(getApplicationContext(),documentsList);
RecycleServiceWdocument=findViewById(R.id.RecycleServiceWdocument);
RecycleServiceWdocument.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(此);
setLayoutManager(layoutManager);
setAdapter(documentListAdapter);
受保护的void onStart(){
super.onStart();
firebaseFirestore.collection(“Users”).document(currentUser.getUid()).collection(“Documents”).get().addOnCompleteListener(新OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(DocumentSnapshot DocumentSnapshot:task.getResult()){
Documents Documents=documentSnapshot.toObject(Documents.class);
文档列表。添加(文档);
documentListAdapter.notifyDataSetChanged();
}
}
}
});
基本上,如果要将文档转换为数据类,则数据类字段的名称应与firestore字段的名称相同。
因此,如果您的数据类中有
documentName
,那么firestore应该有一个名为documentName
的变量,而不是documentName,代码中的问题在于文档中的字段名与数据库中的属性名不同。您可以在您的文档
类中有四个字段,分别命名为文档名称
,文档日期
,检查者名称
,市场位置
,而在数据库中我看到名称不同,文档名称
,文档日期
,检查者名称
和市场位置
,以及这是不正确的。名称必须匹配
您有两种解决方案。第一种解决方案是根据数据库中已经存在的文件更改文档
类中的文件名,或者您可以在getter前面使用注释,如下所示:
@PropertyName("Document Name")
public String getDocumentName() {
return documentName;
}
请发布文档
字段。您的getter/setter与数据库不匹配请向我们显示文档
集合中存在的文档内容。请回复@AlexMamoi已编辑,thank u@Ashishi已编辑,thank u@AlexMamo