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

Android开发:startActivityForResult传递的extra在onActivityResult中为空

问题分析与解决方法

你遇到的这个问题其实很常见,核心原因是:系统相册应用返回的Intent并不会携带你当初发起请求时添加的额外数据。

当你调用startActivityForResult(pickPhoto , LOAD_IMG_REQUEST)时,pickPhoto这个Intent是发给系统相册应用的,但系统相册处理完图片选择操作后,会创建一个全新的Intent来返回结果——这个新Intent只会包含选中图片的Uri,完全不会保留你之前通过putExtra添加的gpsLng数据,所以你在onActivityResult里调用getStringExtra("gpsLng")自然会得到null。

推荐的解决方法

最直接简单的方式是用成员变量临时存储坐标数据,具体步骤如下:

  1. 在你的主Activitygui中添加一个成员变量,用来保存长按地图得到的坐标,同时把请求码定义为可访问的常量:
public class gui extends AppCompatActivity {
    // 定义请求码常量,确保InitialMapLoad能访问到
    public static final int LOAD_IMG_REQUEST = 1001;
    private LatLng mSelectedMapPos; // 用来存储长按得到的坐标
    // ... 其他原有代码
}
  1. 在InitialMapLoad的onMapLongClick方法中,点击确定按钮时把选中的坐标赋值给主Activity的成员变量:
imgSelectPopup.setPositiveButton(R.string.btnOpenGallery, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        // 把长按得到的坐标存到主Activity的成员变量里
        ((gui)lActivity).mSelectedMapPos = mClickPos;
        lActivity.startActivityForResult(pickPhoto , gui.LOAD_IMG_REQUEST);
    }
});
  1. 最后在gui的onActivityResult中直接使用这个成员变量:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    if (requestCode == LOAD_IMG_REQUEST) {
        if(resultCode == RESULT_OK){
            Uri selectedImage = imageReturnedIntent.getData();
            Log.e(TAG, "onActivityResult: 图片Uri=" + selectedImage );
            // 直接读取之前存储的坐标
            if(mSelectedMapPos != null){
                Log.e(TAG, "onActivityResult: 经度=" + mSelectedMapPos.longitude );
                Log.e(TAG, "onActivityResult: 纬度=" + mSelectedMapPos.latitude );
            }
        }
    }
}

其他可选方案

如果你觉得成员变量的方式不够优雅,也可以根据项目复杂度选择:

  • 使用ViewModel来跨组件共享数据(适合更复杂的页面架构)
  • 用SharedPreferences临时存储坐标字符串(适合简单数据,但记得用完清理)

不过对于你当前的新手项目,成员变量的方式是最容易理解和快速实现的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:47:49