Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
从选定的RecyclerView-Android Studio检索Firestore文档_Android_Firebase_Android Studio_Google Cloud Firestore_Android Recyclerview - Fatal编程技术网

从选定的RecyclerView-Android Studio检索Firestore文档

从选定的RecyclerView-Android Studio检索Firestore文档,android,firebase,android-studio,google-cloud-firestore,android-recyclerview,Android,Firebase,Android Studio,Google Cloud Firestore,Android Recyclerview,我是一名初学者,目前正在进行我的最后一年项目。如果这个问题很长,我真的很抱歉,我希望有人能在这方面帮助我,谢谢 预期输出:recyclerView将从FireStore数据库检索集合的所有文档。用户单击recyclerView中的一个项目后,应该从相应的FireStore文档中检索所有信息 问题:我已将firestore文档检索到我的recyclerView。但我现在的问题是,一旦用户单击recyclerView中的项目,我仍然无法从相应的FireStore文档中检索信息 错误在MyAdapte

我是一名初学者,目前正在进行我的最后一年项目。如果这个问题很长,我真的很抱歉,我希望有人能在这方面帮助我,谢谢

预期输出:recyclerView将从FireStore数据库检索集合的所有文档。用户单击recyclerView中的一个项目后,应该从相应的FireStore文档中检索所有信息

问题:我已将firestore文档检索到我的recyclerView。但我现在的问题是,一旦用户单击recyclerView中的项目,我仍然无法从相应的FireStore文档中检索信息

错误在MyAdapter类中:

MyAdapter类:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    OnItemClickListener listener;
    Context context;
    ArrayList<User> userArrayList;

    public MyAdapter(Context context, ArrayList<User> userArrayList) {
        this.context = context;
        this.userArrayList = userArrayList;
    }

    @NonNull
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(context).inflate(R.layout.item, parent,false);
        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
        User user = userArrayList.get(position);

        holder.FullName.setText(user.FullName);
        holder.IDKakitangan.setText(user.IDKakitangan);
    }

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

    public static class MyViewHolder extends RecyclerView.ViewHolder{

        TextView FullName, IDKakitangan;
        OnItemClickListener listener;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            FullName = itemView.findViewById(R.id.tvPemohon);
            IDKakitangan = itemView.findViewById(R.id.tvIDPemohon);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION && listener != null){
                        listener.onItemClick(getSnapshots().getSnapshot(position), position);
                    }
                }
            });
        }
    }

    public interface OnItemClickListener {
        void onItemClick(DocumentSnapshot documentSnapshot, int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener){
        this.listener = listener;
    }

我想这可能会有帮助。嗨,谢谢你的回复。我已经尝试过了,但错误仍然在getSnapshots()上
public class MaklumBalasCuti extends AppCompatActivity {

    RecyclerView recyclerView;
    ArrayList<User> userArrayList;
    MyAdapter myAdapter;
    FirebaseFirestore db;

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

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        db = FirebaseFirestore.getInstance();
        userArrayList = new ArrayList<User>();
        myAdapter = new MyAdapter(MaklumBalasCuti.this,userArrayList);

        recyclerView.setAdapter(myAdapter);

        EventChangeListener();
    }


    private void  EventChangeListener(){

        db.collection("Permohonan Cuti").orderBy("FullName", Query.Direction.ASCENDING)
                .addSnapshotListener(new EventListener<QuerySnapshot>() {
                    @Override
                    public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {

                        if (error != null){
                            Log.e("Pangkalan data gagal",error.getMessage());
                            return;
                        }

                        for (DocumentChange dc : value.getDocumentChanges()){
                            if (dc.getType() == DocumentChange.Type.ADDED){
                                userArrayList.add(dc.getDocument().toObject(User.class));
                            }

                            myAdapter.notifyDataSetChanged();
                        }

                    }
                });

    }
package com.example.staffhub;

import java.io.Serializable;

public class User implements Serializable {

    String FullName, IDKakitangan;

    public User(){}

    public User(String Fullname, String IDKakitangan) {
        this.FullName = Fullname;
        this.IDKakitangan = IDKakitangan;
    }

    public String getFullName() {
        return FullName;
    }

    public void setFullName(String FullName) {
        this.FullName = FullName;
    }

    public String getIDKakitangan() {
        return IDKakitangan;
    }

    public void setIDKakitangan(String IDKakitangan) {
        this.IDKakitangan = IDKakitangan;
    }
}