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

Android开发:如何将onActivityResult结果传递至resultBreakdown类?

嘿,刚接触Android开发就敢上手实践,这习惯超赞!咱们一步步拆解你遇到的onActivityResult结果传递问题,顺便聊聊更现代的替代方案~

先解决核心问题:怎么用get/set把结果传给resultBreakdown类

你说懂get/set但没掌握,大概率是实例引用或时机不对导致的。先看一个正确的实现示例:

假设你的主Activity里持有resultBreakdown的实例,在onActivityResult拿到结果后,调用set方法传递数据:

// 主Activity代码
public class MainActivity extends AppCompatActivity {
    // 确保resultBreakdown是全局实例,不要每次用都new新对象
    private ResultBreakdown resultBreakdown;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化resultBreakdown实例
        resultBreakdown = new ResultBreakdown();
    }

    // 旧API的onActivityResult回调
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 先判断结果有效
        if (resultCode == RESULT_OK && requestCode == YOUR_REQUEST_CODE) {
            // 从返回的Intent中取出数据(这里假设传的是字符串,你根据实际类型改)
            String resultData = data.getStringExtra("RESULT_KEY");
            // 调用set方法把数据传给resultBreakdown
            resultBreakdown.setResultData(resultData);
            // 如果需要立刻处理数据,可以调用resultBreakdown里的逻辑方法
            resultBreakdown.processResult();
        }
    }

    // 启动目标Activity的代码(比如按钮点击事件里)
    public void startTargetActivity(View view) {
        Intent intent = new Intent(this, TargetActivity.class);
        startActivityForResult(intent, YOUR_REQUEST_CODE);
    }
}

// ResultBreakdown类的实现
public class ResultBreakdown {
    private String resultData;

    // Set方法
    public void setResultData(String resultData) {
        this.resultData = resultData;
    }

    // Get方法
    public String getResultData() {
        return resultData;
    }

    // 处理结果的逻辑方法
    public void processResult() {
        if (resultData != null) {
            // 这里写你的业务逻辑,比如解析数据、更新UI等
            Log.d("Result", "拿到的数据:" + resultData);
        }
    }
}

你可能踩的坑:

  • resultBreakdown实例没初始化就调用set方法,导致空指针;
  • 每次调用都new一个新的ResultBreakdown对象,之前设置的数据丢失;
  • 在错误的时机调用get方法(比如还没进入onActivityResult就取数据),拿到空值。
更优实现方案:用Activity Result API替代onActivityResult

onActivityResult已经被官方废弃了,现在推荐用Activity Result API,它的代码更简洁,逻辑更清晰,还能避免requestCode冲突的问题。

实现步骤:

  1. 在主Activity里注册一个结果启动器:
public class MainActivity extends AppCompatActivity {
    private ResultBreakdown resultBreakdown;
    // 注册结果回调的Launcher
    private ActivityResultLauncher<Intent> resultLauncher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        resultBreakdown = new ResultBreakdown();

        // 初始化Launcher,直接在回调里处理结果
        resultLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == RESULT_OK) {
                        Intent data = result.getData();
                        if (data != null) {
                            String resultData = data.getStringExtra("RESULT_KEY");
                            resultBreakdown.setResultData(resultData);
                            resultBreakdown.processResult();
                        }
                    }
                }
        );
    }

    // 启动目标Activity的代码
    public void startTargetActivity(View view) {
        Intent intent = new Intent(this, TargetActivity.class);
        // 用Launcher启动,不用传requestCode
        resultLauncher.launch(intent);
    }
}
  1. 目标Activity返回数据的逻辑不变:
// 目标Activity里返回数据的代码
public void sendResult(View view) {
    Intent intent = new Intent();
    intent.putExtra("RESULT_KEY", "这是返回的测试数据");
    setResult(RESULT_OK, intent);
    finish();
}

这个方案的优势:

  • 不需要管理requestCode,避免不同功能之间的代码冲突;
  • 回调逻辑更集中,可读性更强;
  • 支持封装成独立的结果处理类,解耦Activity和业务逻辑;
  • 适配Android 12+的权限请求等场景(扩展能力更强)。

如果resultBreakdown是和UI相关的类(比如Fragment、自定义View),还可以把结果传递逻辑直接绑定到对应UI组件的生命周期里,避免内存泄漏哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:42