【问题标题】:Can't pass string to the next activity无法将字符串传递给下一个活动
【发布时间】:2018-05-12 06:27:18
【问题描述】:

第一次活动

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsers, UsersViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull AllUsers model) {
            holder.setName(model.getName());
            holder.setStatus(model.getStatus());


            final String user_id = getRef(position).getKey();

            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Users").child(user_id);

                    reference.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            name = dataSnapshot.child("Name").getValue().toString();
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                        }
                    });


                    Intent intent = new Intent(getActivity(), Chat.class);
                    intent.putExtra("Recievers_Id", user_id);
                    intent.putExtra("Recievers_Name", name);

                    startActivity(intent);
                }
            });

        }

第二次活动

name.setText((getIntent().getStringExtra("Recievers_Name")));
MessageRecieverId = getIntent().getStringExtra("Recievers_Id");

id 正在传递,但名称不是...我确定问题在于从数据库中获取它

截图 - https://ibb.co/mBKZLd

我可以从数据库中获取 id,因为它是父级...但我无法获取它的子级“名称”...有人可以指出我哪里出错了

【问题讨论】:

  • 调试您的应用并标记 2 行并检查 user_idname 是否在第一个活动中

标签: java android xml database firebase


【解决方案1】:

这个addListenerForSingleValueEvent 方法是异步调用的。在获得其价值之前,您将name 放入Intent。获得姓名后,您必须启动 Activity。在onDataChange 方法中开始您的聊天Activity

            holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Users").child(user_id);

                reference.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                      name = dataSnapshot.child("Name").getValue().toString();
                      Intent intent = new Intent(getActivity(), Chat.class);
                      intent.putExtra("Recievers_Id", user_id);
                      intent.putExtra("Recievers_Name", name);

                      startActivity(intent);

                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });

【讨论】:

    【解决方案2】:

    addListenerForSingleValueEvent 方法被异步调用。在获取其值之前,您将 name 放入 Intent 中。获得名称后,您必须开始 Activity。在 onDataChange 方法中启动您的聊天活动。

    holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Users").child(user_id);
    
                    reference.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                          name = dataSnapshot.child("Name").getValue().toString();
                          Intent intent = new Intent(getActivity(), Chat.class);
                          intent.putExtra("Recievers_Id", user_id);
                          intent.putExtra("Recievers_Name", name);
    
                          startActivity(intent);
    
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                        }
                    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多