Java 单击时按Id显示Firestore文档,从片段到活动

Java 单击时按Id显示Firestore文档,从片段到活动,java,android,android-fragments,google-cloud-firestore,Java,Android,Android Fragments,Google Cloud Firestore,所以,我一直在使用谷歌的Friendlyeats示例作为指南。为了使用Butterknife,我对它做了一些修改,但在尝试打开单个文档(片段)并在下面的活动中显示其内容时出现了问题 我使用recyclerview来显示汇总数据,然后我想显示活动的完整个人数据。它实际上没有那么多信息,只有四个文本视图 因此,我决定尽可能地坚持原来的例子,看看到底发生了什么。还是一样的错误。我可以打开以下活动,但未显示任何数据 我已经落后lmao三个月了。请帮忙 代码如下: MessageAdapter.java

所以,我一直在使用谷歌的Friendlyeats示例作为指南。为了使用Butterknife,我对它做了一些修改,但在尝试打开单个文档(片段)并在下面的活动中显示其内容时出现了问题

我使用recyclerview来显示汇总数据,然后我想显示活动的完整个人数据。它实际上没有那么多信息,只有四个文本视图

因此,我决定尽可能地坚持原来的例子,看看到底发生了什么。还是一样的错误。我可以打开以下活动,但未显示任何数据

我已经落后lmao三个月了。请帮忙

代码如下:

MessageAdapter.java


    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.bind(getSnapshot(position), mListener);
    }

    static class ViewHolder extends RecyclerView.ViewHolder {



        public ViewHolder(View itemView) {
            super(itemView);
            headerView = itemView.findViewById(R.id.message_item_header);
            senderView = itemView.findViewById(R.id.message_item_sender);
            dateView = itemView.findViewById(R.id.message_item_date);
            imageView = itemView.findViewById(R.id.message_item_image);
            actualMessageView = itemView.findViewById(R.id.actual_message);
        }

        public void bind(final DocumentSnapshot snapshot,
                         final OnMessageSelectedListener listener) {
            Messages messages = snapshot.toObject(Messages.class);


            imageView.setImageResource(R.drawable.logo_app_off);

            headerView.setText(messages.getHeader());
            senderView.setText(messages.getSender());
            actualMessageView.setText(messages.getMessage());
            dateView.setText(messages.getDate());

            itemView.setOnClickListener(v -> {
                if (listener != null) {
                    listener.onMessageSelectedListener(snapshot);
                }
            });
        }
    }
}


   @Override
   public void onMessageSelectedListener(DocumentSnapshot message) {

       Intent intent = new Intent(getActivity(), MessageDetailActivity.class);
       intent.putExtra(KEY_MESSAGE_ID, message.getId());
       startActivity(intent);

   }

   private void initFirestore() {
       mFirestore = FirebaseFirestore.getInstance();

       mQuery = mFirestore.collection("messages")
               .orderBy("date", Query.Direction.DESCENDING)
               .limit(LIMIT);
   }

   private void initRecyclerView() {
       if (mQuery == null) {
           Log.w(TAG, "No query, not initializing RecyclerView");
       }

       mAdapter = new MessageAdapter(mQuery, this) {

           @Override
           protected void onDataChanged() {
               if (getItemCount() == 0) {
                   mMessagesRecycler.setVisibility(View.GONE);
                   mEmptyView.setVisibility(View.VISIBLE);
               } else {
                   mMessagesRecycler.setVisibility(View.VISIBLE);
                   mEmptyView.setVisibility(View.GONE);
               }
           }

           @Override
           protected void onError(FirebaseFirestoreException e) {
               Snackbar.make(view.findViewById(android.R.id.content),
                       "Error: check logs for info.", Snackbar.LENGTH_LONG).show();
           }
       };

       mMessagesRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
       mMessagesRecycler.setAdapter(mAdapter);
   }

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




       String messageId = getIntent().getExtras().getString(KEY_MESSAGE_ID);
       if (messageId == null) {
           throw new IllegalArgumentException("Must pass extra " + KEY_MESSAGE_ID);
       }

       mFirestore = FirebaseFirestore.getInstance();

       mMessageRef = mFirestore.collection("messages").document(messageId);



   }

   @Override
   public void onEvent(DocumentSnapshot snapshot, FirebaseFirestoreException e) {
       if (e != null) {
           Log.w(TAG, "message:onEvent", e);
           return;
       }

       onMessageLoaded(snapshot.toObject(Messages.class));
   }

   private void onMessageLoaded(Messages message) {
       mDetailedHeader.setText(message.getHeader());
       mDetailedHeader.setText(message.getSender());
       mDetailedMessage.setText(message.getMessage());
       mDetailedDate.setText(message.getDate());
   }
}

HomeFragment.java


    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.bind(getSnapshot(position), mListener);
    }

    static class ViewHolder extends RecyclerView.ViewHolder {



        public ViewHolder(View itemView) {
            super(itemView);
            headerView = itemView.findViewById(R.id.message_item_header);
            senderView = itemView.findViewById(R.id.message_item_sender);
            dateView = itemView.findViewById(R.id.message_item_date);
            imageView = itemView.findViewById(R.id.message_item_image);
            actualMessageView = itemView.findViewById(R.id.actual_message);
        }

        public void bind(final DocumentSnapshot snapshot,
                         final OnMessageSelectedListener listener) {
            Messages messages = snapshot.toObject(Messages.class);


            imageView.setImageResource(R.drawable.logo_app_off);

            headerView.setText(messages.getHeader());
            senderView.setText(messages.getSender());
            actualMessageView.setText(messages.getMessage());
            dateView.setText(messages.getDate());

            itemView.setOnClickListener(v -> {
                if (listener != null) {
                    listener.onMessageSelectedListener(snapshot);
                }
            });
        }
    }
}


   @Override
   public void onMessageSelectedListener(DocumentSnapshot message) {

       Intent intent = new Intent(getActivity(), MessageDetailActivity.class);
       intent.putExtra(KEY_MESSAGE_ID, message.getId());
       startActivity(intent);

   }

   private void initFirestore() {
       mFirestore = FirebaseFirestore.getInstance();

       mQuery = mFirestore.collection("messages")
               .orderBy("date", Query.Direction.DESCENDING)
               .limit(LIMIT);
   }

   private void initRecyclerView() {
       if (mQuery == null) {
           Log.w(TAG, "No query, not initializing RecyclerView");
       }

       mAdapter = new MessageAdapter(mQuery, this) {

           @Override
           protected void onDataChanged() {
               if (getItemCount() == 0) {
                   mMessagesRecycler.setVisibility(View.GONE);
                   mEmptyView.setVisibility(View.VISIBLE);
               } else {
                   mMessagesRecycler.setVisibility(View.VISIBLE);
                   mEmptyView.setVisibility(View.GONE);
               }
           }

           @Override
           protected void onError(FirebaseFirestoreException e) {
               Snackbar.make(view.findViewById(android.R.id.content),
                       "Error: check logs for info.", Snackbar.LENGTH_LONG).show();
           }
       };

       mMessagesRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
       mMessagesRecycler.setAdapter(mAdapter);
   }

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




       String messageId = getIntent().getExtras().getString(KEY_MESSAGE_ID);
       if (messageId == null) {
           throw new IllegalArgumentException("Must pass extra " + KEY_MESSAGE_ID);
       }

       mFirestore = FirebaseFirestore.getInstance();

       mMessageRef = mFirestore.collection("messages").document(messageId);



   }

   @Override
   public void onEvent(DocumentSnapshot snapshot, FirebaseFirestoreException e) {
       if (e != null) {
           Log.w(TAG, "message:onEvent", e);
           return;
       }

       onMessageLoaded(snapshot.toObject(Messages.class));
   }

   private void onMessageLoaded(Messages message) {
       mDetailedHeader.setText(message.getHeader());
       mDetailedHeader.setText(message.getSender());
       mDetailedMessage.setText(message.getMessage());
       mDetailedDate.setText(message.getDate());
   }
}

DetailMessageActivity.java


    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.bind(getSnapshot(position), mListener);
    }

    static class ViewHolder extends RecyclerView.ViewHolder {



        public ViewHolder(View itemView) {
            super(itemView);
            headerView = itemView.findViewById(R.id.message_item_header);
            senderView = itemView.findViewById(R.id.message_item_sender);
            dateView = itemView.findViewById(R.id.message_item_date);
            imageView = itemView.findViewById(R.id.message_item_image);
            actualMessageView = itemView.findViewById(R.id.actual_message);
        }

        public void bind(final DocumentSnapshot snapshot,
                         final OnMessageSelectedListener listener) {
            Messages messages = snapshot.toObject(Messages.class);


            imageView.setImageResource(R.drawable.logo_app_off);

            headerView.setText(messages.getHeader());
            senderView.setText(messages.getSender());
            actualMessageView.setText(messages.getMessage());
            dateView.setText(messages.getDate());

            itemView.setOnClickListener(v -> {
                if (listener != null) {
                    listener.onMessageSelectedListener(snapshot);
                }
            });
        }
    }
}


   @Override
   public void onMessageSelectedListener(DocumentSnapshot message) {

       Intent intent = new Intent(getActivity(), MessageDetailActivity.class);
       intent.putExtra(KEY_MESSAGE_ID, message.getId());
       startActivity(intent);

   }

   private void initFirestore() {
       mFirestore = FirebaseFirestore.getInstance();

       mQuery = mFirestore.collection("messages")
               .orderBy("date", Query.Direction.DESCENDING)
               .limit(LIMIT);
   }

   private void initRecyclerView() {
       if (mQuery == null) {
           Log.w(TAG, "No query, not initializing RecyclerView");
       }

       mAdapter = new MessageAdapter(mQuery, this) {

           @Override
           protected void onDataChanged() {
               if (getItemCount() == 0) {
                   mMessagesRecycler.setVisibility(View.GONE);
                   mEmptyView.setVisibility(View.VISIBLE);
               } else {
                   mMessagesRecycler.setVisibility(View.VISIBLE);
                   mEmptyView.setVisibility(View.GONE);
               }
           }

           @Override
           protected void onError(FirebaseFirestoreException e) {
               Snackbar.make(view.findViewById(android.R.id.content),
                       "Error: check logs for info.", Snackbar.LENGTH_LONG).show();
           }
       };

       mMessagesRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
       mMessagesRecycler.setAdapter(mAdapter);
   }

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




       String messageId = getIntent().getExtras().getString(KEY_MESSAGE_ID);
       if (messageId == null) {
           throw new IllegalArgumentException("Must pass extra " + KEY_MESSAGE_ID);
       }

       mFirestore = FirebaseFirestore.getInstance();

       mMessageRef = mFirestore.collection("messages").document(messageId);



   }

   @Override
   public void onEvent(DocumentSnapshot snapshot, FirebaseFirestoreException e) {
       if (e != null) {
           Log.w(TAG, "message:onEvent", e);
           return;
       }

       onMessageLoaded(snapshot.toObject(Messages.class));
   }

   private void onMessageLoaded(Messages message) {
       mDetailedHeader.setText(message.getHeader());
       mDetailedHeader.setText(message.getSender());
       mDetailedMessage.setText(message.getMessage());
       mDetailedDate.setText(message.getDate());
   }
}


如果您遇到问题,最好在发布问题时创建一个。您为此问题发布了近300行代码。对于人们来说,在线解析和调试是非常困难的。请编辑您的问题并隔离问题,这样可以增加您获得帮助的机会。是的,我现在看到了我的错误。更正,谢谢!如果您遇到问题,最好在发布问题时创建一个。您为此问题发布了近300行代码。对于人们来说,在线解析和调试是非常困难的。请编辑您的问题并隔离问题,这样可以增加您获得帮助的机会。是的,我现在看到了我的错误。更正,谢谢!