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

Android跳转EventDetail页读取eventRole参数时闪退回上页如何解决?

问题根因

闪退的核心原因是Intent传递和接收的数据类型不匹配:

  1. 你从Firestore中读取的eventRole字段对应数组类型,在Java实体类中getEventRoles()默认返回的是List<String>类型,而非原生String[]数组。你直接调用intent.putExtra("eventRole", datalist.get(position).getEventRoles())存入时,系统会将其识别为Serializable类型的List集合。
  2. 你在EventDetail中调用getStringArrayExtra("eventRole")取值,只能得到null,将null传入ArrayAdapter构造方法会触发空指针异常,导致应用直接闪退回退。

解决方案

两种方案二选一即可:

方案1:传递时转换为String数组

修改Adapter中Intent传值的逻辑,存入前先把List转为String数组:

holder.detailBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(holder.detailBtn.getContext(), EventDetail.class);
        intent.putExtra("eventName", datalist.get(position).getEventName());
        intent.putExtra("eventDate", datalist.get(position).getEventDate());
        intent.putExtra("eventVenue", datalist.get(position).getEventVenue());
        intent.putExtra("eventDesc", datalist.get(position).getEventDesc());
        // 新增转换逻辑
        List<String> roleList = datalist.get(position).getEventRoles();
        String[] roleArray = roleList.toArray(new String[0]);
        intent.putExtra("eventRole", roleArray);
        intent.putExtra("eventCreator", datalist.get(position).getEventCreator());

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        holder.detailBtn.getContext().startActivity(intent);
    }
});

EventDetail中的原有接收逻辑无需修改。

方案2:接收时按List类型取值

ArrayAdapter本身支持直接传入List作为数据源,无需修改传值逻辑,直接修改接收代码即可:

List<String> roles = (List<String>) getIntent().getSerializableExtra("eventRole");
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.option_item, roles);

调试建议

如果后续遇到类似无明确报错的闪退问题,可以将可疑代码块用try-catch包裹,打印异常栈快速定位问题:

try {
    // 可疑代码
} catch (Exception e) {
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者PI PI NAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:27:02