Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将Firestore数据检索到Recylerview不工作_Android_Android Recyclerview_Google Cloud Firestore_Android Cardview_Android Viewholder - Fatal编程技术网

Android 将Firestore数据检索到Recylerview不工作

Android 将Firestore数据检索到Recylerview不工作,android,android-recyclerview,google-cloud-firestore,android-cardview,android-viewholder,Android,Android Recyclerview,Google Cloud Firestore,Android Cardview,Android Viewholder,当用户从第二个微调器中选择一个项目并在RedcyclerView内部的CardView中显示时,我基本上希望显示firestore中的数据。 代码不会抛出任何错误,但也不会显示数据,即从第二个微调器中选择项目时不会发生任何事情。 我的Firestore数据库架构类似于: 测试>第7级(标准/等级)>物理(科目)>问题编号>1>文档自动ID>qName、op1、op2、op3、op4、cop(字段) 这是QuestionListFragment.java,我想在这里显示数据 public clas

当用户从第二个微调器中选择一个项目并在RedcyclerView内部的CardView中显示时,我基本上希望显示firestore中的数据。 代码不会抛出任何错误,但也不会显示数据,即从第二个微调器中选择项目时不会发生任何事情。 我的Firestore数据库架构类似于: 测试>第7级(标准/等级)>物理(科目)>问题编号>1>文档自动ID>qName、op1、op2、op3、op4、cop(字段)

这是QuestionListFragment.java,我想在这里显示数据

public class QuestionListFragment extends Fragment {

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
Spinner spin1,spin2;
String sub,std,TAG="QuestionListFragment";
private FirebaseFirestore db;
private CollectionReference ref;
private QuestionItemAdapter adapter;
RecyclerView recyclerView;


public QuestionListFragment() {
    // Required empty public constructor
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @param param1 Parameter 1.
 * @param param2 Parameter 2.
 * @return A new instance of fragment QuestionListFragment.
 */
// TODO: Rename and change types and number of parameters
public static QuestionListFragment newInstance(String param1, String param2) {
    QuestionListFragment fragment = new QuestionListFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_question_list, container, false);

    db=FirebaseFirestore.getInstance();

    spin1=(Spinner)view.findViewById(R.id.list_standard_spinner);
    ArrayAdapter<String> arrayAdapter1 = new ArrayAdapter<String>(getContext(), android.R.layout.simple_expandable_list_item_1, getResources().getStringArray(R.array.standard));
    arrayAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spin1.setAdapter(arrayAdapter1);



    spin2= (Spinner) view.findViewById(R.id.list_subject_spinner);
    ArrayAdapter<String> arrayAdapter2 = new ArrayAdapter<String>(getContext(), android.R.layout.simple_expandable_list_item_1,getResources().getStringArray(R.array.subjects));
    arrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spin2.setAdapter(arrayAdapter2);
   spin2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            //sub=spin2.getSelectedItem().toString().trim();
            setUpRecylerView();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });
    recyclerView= view.findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    return view;
}
public void setUpRecylerView(){
    for (int i=1;i<=50;i++){
        Log.d(TAG, "setUpRecylerView: In setuprecylerview");
        std=spin1.getSelectedItem().toString().trim();
        sub=spin2.getSelectedItem().toString().trim();
        CollectionReference cref;

        ref=db.collection("Tests").document(std).collection(sub).document("QuestionNum").collection(String.valueOf(i));
      
        Query query = ref.orderBy("qName",Query.Direction.ASCENDING);
        FirestoreRecyclerOptions<QuestionItem> options = new FirestoreRecyclerOptions.Builder<QuestionItem>()
                .setQuery(query,QuestionItem.class)
                .build();

        adapter=new QuestionItemAdapter(options);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setAdapter(adapter);
        adapter.startListening();

    }
}
}
这是adapater类QuestionItemAdapter.java

public class QuestionItemAdapter extends FirestoreRecyclerAdapter<QuestionItem, 
QuestionItemAdapter.NoteHolder> {

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

@Override
protected void onBindViewHolder(@NonNull QuestionItemAdapter.NoteHolder holder, int position, 
@NonNull QuestionItem model) {
    holder.qname_textview.setText(model.getqName());
    holder.op1_textview.setText(model.getOp1());
    holder.op2_textview.setText(model.getOp2());
    holder.op3_textview.setText(model.getOp3());
    holder.op4_textview.setText(model.getOp4());
    holder.cop_textview.setText(model.getCop());
}

@NonNull
@Override
public QuestionItemAdapter.NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.question_item,parent,false);
    return new NoteHolder(v);
}

class NoteHolder extends RecyclerView.ViewHolder{
    TextView qname_textview,op1_textview,op2_textview,op3_textview,op4_textview,cop_textview;

    public NoteHolder(@NonNull View itemView) {
        super(itemView);
        qname_textview=itemView.findViewById(R.id.qName_display);
        op1_textview=itemView.findViewById(R.id.op1_display);
        op2_textview=itemView.findViewById(R.id.op2_display);
        op3_textview=itemView.findViewById(R.id.op3_display);
        op4_textview=itemView.findViewById(R.id.op4_display);
        cop_textview=itemView.findViewById(R.id.correct_op_display);
    }
}
}
公共类QuestionItemAdapter扩展FirestoreRecyclerAdapter{
/**
*创建一个新的RecyclerView适配器,用于侦听Firestore查询。请参阅{@link
*FirestoreRecyclerOptions}用于配置选项。
*
*@param选项
*/
public QuestionItemAdapter(@NonNull FirestoreRecyclerOptions选项){
超级(期权);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull QuestionItemAdapter.NoteHolder holder,int位置,
@非空(项目模型){
holder.qname_textview.setText(model.getqName());
holder.op1_textview.setText(model.getOp1());
holder.op2_textview.setText(model.getOp2());
holder.op3_textview.setText(model.getOp3());
holder.op4_textview.setText(model.getOp4());
holder.cop_textview.setText(model.getCop());
}
@非空
@凌驾
public QuestionItemAdapter.NoteHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.question_项,parent,false);
返还新票据持有人(v);
}
类NoteHolder扩展了RecyclerView.ViewHolder{
TextView qname_TextView、op1_TextView、op2_TextView、op3_TextView、op4_TextView、cop_TextView;
公共票据持有人(@NonNull View itemView){
超级(项目视图);
qname\u textview=itemView.findViewById(R.id.qname\u显示);
op1_textview=itemView.findviewbyd(R.id.op1_显示);
op2_textview=itemView.findviewbyd(R.id.op2_显示);
op3_textview=itemView.findviewbyd(R.id.op3_显示);
op4_textview=itemView.findviewbyd(R.id.op4_显示);
cop_textview=itemView.findViewById(R.id.correct_op_display);
}
}
}

如果你遇到问题,最好在发布问题时创建一个链接。您为此问题发布了近350行代码。对于人们来说,在线解析和调试是非常困难的。请编辑您的问题并隔离问题,这样可以增加您获得帮助的机会。删除那些布局XML文件。谢谢你的建议。
public class QuestionItemAdapter extends FirestoreRecyclerAdapter<QuestionItem, 
QuestionItemAdapter.NoteHolder> {

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

@Override
protected void onBindViewHolder(@NonNull QuestionItemAdapter.NoteHolder holder, int position, 
@NonNull QuestionItem model) {
    holder.qname_textview.setText(model.getqName());
    holder.op1_textview.setText(model.getOp1());
    holder.op2_textview.setText(model.getOp2());
    holder.op3_textview.setText(model.getOp3());
    holder.op4_textview.setText(model.getOp4());
    holder.cop_textview.setText(model.getCop());
}

@NonNull
@Override
public QuestionItemAdapter.NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.question_item,parent,false);
    return new NoteHolder(v);
}

class NoteHolder extends RecyclerView.ViewHolder{
    TextView qname_textview,op1_textview,op2_textview,op3_textview,op4_textview,cop_textview;

    public NoteHolder(@NonNull View itemView) {
        super(itemView);
        qname_textview=itemView.findViewById(R.id.qName_display);
        op1_textview=itemView.findViewById(R.id.op1_display);
        op2_textview=itemView.findViewById(R.id.op2_display);
        op3_textview=itemView.findViewById(R.id.op3_display);
        op4_textview=itemView.findViewById(R.id.op4_display);
        cop_textview=itemView.findViewById(R.id.correct_op_display);
    }
}
}