【发布时间】:2018-05-03 18:18:58
【问题描述】:
我在片段中有一个回收器来显示 firestore 中集合中的文档,问题是,它只是从文档中检索某些字段,看起来它忽略了模型类中的一些其他 Setter 字段,这个是我得到的错误:
W/Firestore: (0.6.6-dev) [zzko]: 找不到 sabado 的设置器/字段 班级 com.example.denilsondasilva.iasdmt.com.example.denilsondasilva.com.example.denilsondasilva.MODELS.ModelProgramas
现在这是我的模型类:
public class ModelProgramas {
public ModelProgramas() {
}
public ModelProgramas(String sabado, String evento, String responsavel, String data, String horario) {
this.sabado = sabado;
this.evento = evento;
this.responsavel = responsavel;
this.data = data;
this.horario = horario;
}
public String getSabado() {
return sabado;
}
public void setSabado(String sabado) {
this.sabado = sabado;
}
public String getEvento() {
return evento;
}
public void setEvento(String evento) {
this.evento = evento;
}
public String getResponsavel() {
return responsavel;
}
public void setResponsavel(String responsavel) {
this.responsavel = responsavel;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getHorario() {
return horario;
}
public void setHorario(String horario) {
this.horario = horario;
}
private String sabado;
private String evento;
private String responsavel;
private String data;
private String horario;
}
我已经为类创建了一个 EMPTY CONSTRUCTOR,我已经为变量以及 Getter 和 Setter 创建了 CONSTRUCTORS,并且我已经看到以前的问题具有相同的问题,所以我知道我的 GETTERS 和 SETTERS 和变量是正确创建的。变量小写,getter 和 setter 以大写开头。并且firestore文档中的字符串与创建的变量相同
这是我的适配器:
public class PROGRAMASrecyclerAdapter extends RecyclerView.Adapter<PROGRAMASrecyclerAdapter.Programasholder> {
Context ctx;
private List<ModelProgramas> Progs_list;
public PROGRAMASrecyclerAdapter(List<ModelProgramas> progs_list) {
this.Progs_list = progs_list;
}
@NonNull
@Override
public Programasholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ctx = parent.getContext();
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.programas_list_item,parent,false);
return new Programasholder(view);
}
@Override
public void onBindViewHolder(@NonNull Programasholder holder, int position) {
final String sabado = Progs_list.get(position).getSabado();
holder.setSabado(sabado);
String evento = Progs_list.get(position).getEvento();
holder.setEvento(evento);
String responsavel = Progs_list.get(position).getResponsavel();
holder.setResponsavel(responsavel);
String data = Progs_list.get(position).getData();
holder.setData(data);
String horario = Progs_list.get(position).getHorario();
holder.setHorario(horario);
holder.mcardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ctx, sabado, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return Progs_list.size();
}
public class Programasholder extends RecyclerView.ViewHolder{
View mView;
private TextView Sabadotxt;
private TextView Eventotxt;
private TextView Responsaveltxt;
private TextView DatadoEventotxt;
private TextView Horariotxt;
private CardView mcardView;
public Programasholder(View itemView) {
super(itemView);
mView = itemView;
mcardView = mView.findViewById(R.id.listCard_Programas);
}
public void setSabado(String sabado){
Sabadotxt = mView.findViewById(R.id.Prog_sabadotxt);
Sabadotxt.setText(sabado);
}
public void setEvento(String evento){
Eventotxt = mView.findViewById(R.id.Prog_eventotxt);
Eventotxt.setText(evento);
}
public void setResponsavel(String responsavel){
Responsaveltxt = mView.findViewById(R.id.Prog_responsaveltxt);
Responsaveltxt.setText(responsavel);
}
public void setData(String data){
DatadoEventotxt = mView.findViewById(R.id.Prog_datadoEventotxt);
DatadoEventotxt.setText(data);
}
public void setHorario(String horario){
Horariotxt = mView.findViewById(R.id.Prog_horariotxt);
Horariotxt.setText(horario);
}
}
}
我什至在cardview上创建了一个点击监听器来显示检索到的字符串“sabado”,看看问题是否出在Viewholder类上,但它是返回NULL
这是我的片段类:
public class ProgramasFragment extends Fragment {
View view;
private RecyclerView recyclerView;
private List<ModelProgramas> Progs_List;
private FirebaseFirestore firebaseFirestore;
PROGRAMASrecyclerAdapter programaSrecyclerAdapter;
public ProgramasFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_programas, container, false);
Progs_List = new ArrayList<>();
programaSrecyclerAdapter = new PROGRAMASrecyclerAdapter(Progs_List);
firebaseFirestore = FirebaseFirestore.getInstance();
recyclerView = view.findViewById(R.id.Recycler_ProgramasList);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(programaSrecyclerAdapter);
firebaseFirestore.collection("programasdatarde").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (queryDocumentSnapshots == null){
String error = e.getCause().getMessage();
Toast.makeText(getActivity().getApplicationContext(), "Empty QUERY: "+error, Toast.LENGTH_SHORT).show();
}else{
for (DocumentChange doc: queryDocumentSnapshots.getDocumentChanges()){
if (doc.getType() == DocumentChange.Type.ADDED){
ModelProgramas modelProgramas = doc.getDocument().toObject(ModelProgramas.class);
Progs_List.add(modelProgramas);
programaSrecyclerAdapter.notifyDataSetChanged();
}
}
}
}
});
return view;
}
}
我知道问题不在于片段类或适配器,我的意思是我认为,因为我已经一遍又一遍地审查它们,而且我还有其他带有 recyclerviews 的片段执行相同的功能并且它们不存在这种错误。
请不要将此标记为重复的问题,因为我已经在其他相关帖子上制定了所有其他解决方案,但它并没有解决我的错误!请帮忙。
而且数据结构是这样的。
【问题讨论】:
-
你能发布你的数据库结构吗?
-
是的,您确定其他值已正确检索吗?它会崩溃吗?它没有显示您的任何物品吗?请回答这些问题。
-
是的,其他值正在根据需要检索,不,它不会崩溃,它会显示除上述之外的所有值,这是模型类的第一项,我之前遇到过这个问题,但后来只是更改了模型类和数据库中的变量名称,它突然起作用了,但我注意到的一件事是,它只或最常见于类中的第一个变量,我不知道是否这很重要,但这就是我注意到的
-
好的。以及数据库结构?
-
我发布了上面的链接,我捕捉到了文档名称和集合中的字段
标签: java android firebase google-cloud-firestore