StartActivityForResult() 和setResult() 方法获取不到result 的BUG

setResult() 这个方法需要在 finish() 方法 调用前  ,才可以 set  成功 

 

activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。
那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),
因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的

按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .
解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了

 

如果 测试 可以把setResult()方法 可以放在一个点击事件中  我是放在了onDestroy()方法里面  ,可以调用 到 StartActivityForResult()方法 ,但是获取到的ResultCode = 0

 

 

把setResutl()方法放到 一个返回按钮的点击事件中,一切正常了;

 

 

更多 基础跳转 参考资料  http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html

<think>嗯,用户遇到了Keil5编译时的警告问题,具体是关于IRQ_Init函数的#1295-D警告。我需要先理解这个警告的原因。根据之前的引用内容,像这样的警告通常是因为函数声明时没有明确参数类型。比如,用户可能声明了IRQ_Init()而没有参数类型,导致编译器认为这是过时的声明方式。 首先,我应该检查函数声明和定义的地方。用户可能在头文件里声明了IRQ_Init(),但没有指定参数。根据引用[2]和[3]的例子,正确的做法是在函数声明中加入void,即IRQ_Init(void)。这样编译器就知道该函数确实没有参数,而不是旧的K&R风格声明。 接下来,用户可能在源文件中定义了IRQ_Init函数,可能也没有参数列表。这时候同样需要修改定义部分,加上void。比如,原来的定义可能是void IRQ_Init() { ... },需要改为void IRQ_Init(void) { ... }。这样可以确保声明和定义一致,消除警告。 另外,用户可能没有检查所有调用该函数的地方,是否存在错误传递参数的情况。虽然这个函数没有参数,但如果有地方错误地传递了参数,可能会导致其他问题。不过根据警告信息,主要是声明的问题,所以先处理声明和定义应该足够。 总结步骤:修改头文件中的声明,添加void;修改源文件中的定义,添加void;确保调用正确。同时,参考之前的解决方案,比如引用[2]中的例子,直接应用即可解决问题。需要提醒用户注意代码中的其他类似函数,也可能存在同样的问题,一并检查修改。</think>### 解决Keil5中IRQ_Init函数的#1295-D警告问题 **问题分析** Keil5编译时出现`warning: #1295-D: Deprecated declaration IRQ_Init - give arg types`,这表明函数`IRQ_Init`的声明方式已过时。根本原因是**函数声明未明确指定参数类型**,导致编译器认为使用了旧式函数定义(K&R风格)[^2][^3]。 --- #### 解决步骤 1. **修改函数声明** 在头文件(如`irq.h`)中,将函数声明从`IRQ_Init()`改为明确指定参数类型为`void`: ```c // 原声明(触发警告) void IRQ_Init(); // 修改后(消除警告) void IRQ_Init(void); ``` 2. **修改函数定义** 在源文件(如`irq.c`)中,确保函数定义也包含`void`参数: ```c // 原定义(触发警告) void IRQ_Init() { // 函数体 } // 修改后(消除警告) void IRQ_Init(void) { // 函数体 } ``` 3. **检查所有调用处** 确认调用`IRQ_Init()`时未传递任何参数。例如: ```c int main(void) { IRQ_Init(); // 正确调用 // ... } ``` --- #### 原理说明 - C语言中,函数声明`void func()`表示参数类型未指定(旧式声明),而`void func(void)`明确表示无参数[^2]。 - Keil5的编译器(基于ARMCC)要求遵循C99/C11标准,旧式声明会触发兼容性警告---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值