You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中从Activity及RecyclerView适配器传值至目标Activity返回Null问题

解决两个Intent传值返回Null的问题

问题1:第一个Activity通过Intent.getExtras()传递数据返回Null

这种情况基本都是传值链路里某个环节出了疏漏,给你列几个最常见的排查方向和解决办法:

  • 核对键名的一致性:你在第一个Activity用intent.putExtra("USER_NAME", username)时的键名,和第二个ActivitygetIntent().getExtras().getString("USER_NAME")的键名必须完全一致——大小写、拼写差一个字符都会直接返回null。
  • 确认Intent已正确启动目标页:有没有调用startActivity(intent)或者startActivityForResult(intent, requestCode)?如果没执行启动操作,目标Activity自然拿不到任何数据。
  • 传递自定义对象时要序列化:如果传的是自己定义的类对象,必须让这个类实现Parcelable或Serializable接口,不然Intent无法完成对象的序列化传递,getExtras()就会返回null。举个Parcelable的简单示例:
    public class User implements Parcelable {
        // 实现Parcelable要求的describeContents()和writeToParcel()方法
        // 以及对应的Creator内部类
    }
    
  • 优先用Intent的putExtra方法:尽量不要手动创建Bundle再设置给Intent,直接用intent.putExtra()系列方法添加数据,手动操作Bundle偶尔会出现意外的空值问题。

问题2:BlogRecyclerAdapter传递用户名到目标Activity返回Null

结合你给出的Adapter代码开头,大概率是这几个地方出了问题,你可以逐个排查:

  • 先确认要传递的用户名本身不为空:在Adapter的点击事件里,先打印blog_list.get(position).getUsername()的值,如果这个值本身就是null,那传过去肯定也是null——这时候要检查FirebaseFirestore获取BlogPost数据时,有没有把Firestore里的用户名字段正确映射到BlogPost对象的对应变量上(比如Firestore里是"username",你BlogPost里的变量是userName,就会映射失败)。
  • 点击事件中获取正确的列表位置:在ViewHolder的点击监听里,要用getAdapterPosition()获取当前项的真实数据位置,别用getLayoutPosition()(这个是布局渲染位置,可能和数据列表位置不匹配),示例代码:
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.itemView.setOnClickListener(v -> {
            int correctPosition = holder.getAdapterPosition();
            if (correctPosition != RecyclerView.NO_POSITION) {
                BlogPost post = blog_list.get(correctPosition);
                String username = post.getUsername();
                // 先打印username确认不为null再继续传递逻辑
            }
        });
    }
    
  • 用正确的上下文创建Intent:在Adapter里创建Intent时,要用构造方法传入的context(应该是Activity上下文),别用context.getApplicationContext()——虽然多数时候没问题,但偶尔会导致Intent传递异常。正确写法:
    Intent intent = new Intent(context, TargetActivity.class);
    intent.putExtra("USERNAME", username);
    context.startActivity(intent);
    
  • 核对目标Activity的取值键名:和问题1一样,目标Activity里的取值键名必须和Adapter里putExtra的键完全一致,比如Adapter用的是"USERNAME",目标页就不能写成"user_name"。

最后给你个小建议:把传递数据的键名定义成全局常量,比如在某个工具类里写public static final String KEY_USERNAME = "USER_NAME";,这样两边都引用这个常量,就能彻底避免拼写错误的问题。

内容的提问来源于stack exchange,提问作者Hrithik Rawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:43:54