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

Android中onActivityResult未调用求助:已按方案操作仍失效

问题排查与解决方案

嘿,我帮你找出了导致onActivityResult()没被调用的关键问题,还有几个可以优化的点,咱们一步步来:

1. 核心问题:Application级别的android:noHistory="true"属性

你在Manifest的<application>标签里设置了android:noHistory="true",这个属性会让应用内所有Activity在离开(比如跳转到另一个Activity)后被立即销毁,不会保留在任务栈中。当你从AddressActivity返回PaymentActivity时,PaymentActivity已经被系统销毁了,自然无法触发onActivityResult()方法。这是最主要的原因。

2. 次要问题:ResultCode使用不规范(非直接原因,但易引发后续问题)

你自定义了resultCode为2,虽然语法上没问题,但Android系统提供了标准的结果码常量(比如Activity.RESULT_OK=-1、Activity.RESULT_CANCELED=0),使用这些标准常量更易读,也能避免和系统预留值冲突。


修改方案

第一步:移除Application的noHistory属性

打开Manifest文件,删掉<application>标签里的android:noHistory="true":

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.vuclip.liqyd">
    <application 
        android:name=".LiqydApp" 
        android:allowBackup="true" 
        android:icon="@mipmap/ic_launcher" 
        android:label="@string/app_name" 
        <!-- 移除这一行 -->
        android:roundIcon="@mipmap/ic_launcher_round" 
        android:supportsRtl="true" 
        android:theme="@style/AppTheme">
        <!-- 所有Activity配置保持不变 -->
    </application>
</manifest>

如果确实需要某个Activity设置noHistory,单独给该Activity标签添加android:noHistory="true"即可,不要在Application级别全局设置。

第二步:规范ResultCode的使用

调用方PaymentActivity修改onActivityResult:
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d(TAG, "onActivityResult: called"); 
    super.onActivityResult(requestCode, resultCode, data); 
    // 同时匹配请求码(2)和标准结果码RESULT_OK
    if (requestCode == 2 && resultCode == Activity.RESULT_OK && data != null) { 
        if (validIntent(data)) { 
            addressTextView.setText( 
                MessageFormat.format("{0},{1}\n{2}", 
                    data.getStringExtra(UserConstants.USER_ADDRESS_1), 
                    data.getStringExtra(UserConstants.USER_ADDRESS_2), 
                    data.getStringExtra(UserConstants.USER_ADDRESS_LANDMARK))); 
        } 
    } 
}
被调用方AddressActivity修改返回逻辑:
Intent resultIntent = new Intent(); 
resultIntent.putExtra(UserConstants.USER_ADDRESS_1, address1.getText().toString()); 
resultIntent.putExtra(UserConstants.USER_ADDRESS_2, address2.getText().toString()); 
resultIntent.putExtra(UserConstants.USER_ADDRESS_LANDMARK, landmark.getText().toString()); 
// 使用系统标准结果码
setResult(Activity.RESULT_OK, resultIntent);
// 必须调用finish()关闭当前Activity,才能回到调用方并触发onActivityResult
finish();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:34:28