Android中Intent跨Activity传递数据失败问题求助
Android跨Activity传递数据始终为null的排查与解决
问题描述
跨Activity传递字符串数据时,严格按照官方步骤实现,但接收端始终获取到null。已确认发送的url122本身是字符串类型,尝试过直接传递、toString()、getText().toString()等方式均无效。
发送代码:
Intent intent = new Intent(this, Osnova.class); intent.putExtra("url122", url122.toString()); startActivity(intent);
接收代码:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_osnova); Intent intent = getIntent(); String url = intent.getStringExtra("url122"); }
排查与解决步骤
确认数据源本身有效性
在发送端添加日志打印,先验证url122的值是否正常:Log.d("SendDebug", "url122 before send: " + url122);如果此处打印为
null,问题根源在数据源本身,和Intent传值逻辑无关。检查Activity启动模式
若Osnova在Manifest中设置了launchMode="singleInstance"或singleTask,新启动的Intent不会携带额外数据,而是复用已有实例。需在onNewIntent()中获取新Intent数据:@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); // 更新当前Activity的Intent实例 String url = getIntent().getStringExtra("url122"); // 后续数据处理逻辑 }校验键名一致性
反复核对发送和接收的键名"url122",确保大小写、拼写完全一致,任何字符差异都会导致获取不到数据。改用Bundle封装传递
尝试用Bundle包裹数据后传递,排查是否为Intent直接传值的异常:
发送端:Intent intent = new Intent(this, Osnova.class); Bundle bundle = new Bundle(); bundle.putString("url122", url122); intent.putExtras(bundle); startActivity(intent);接收端:
Bundle bundle = getIntent().getExtras(); if (bundle != null) { String url = bundle.getString("url122"); }排查多启动路径干扰
确认Osnova是否存在其他启动入口(比如隐式Intent、通知跳转、桌面快捷方式等),若通过这些路径启动,Intent不会携带url122数据,导致获取结果为null。
内容的提问来源于stack exchange,提问作者user20229409
相关产品推荐
相关产品推荐

