问题描述
我正在为 Tizen(智能手表)编写应用程序。无法将结构传递给回调。 我的类型定义:
typedef struct _Health {
...;
const char *data;
} health_s;
声明一个结构并初始化它:
health_s health = {
...,.data = "steps"
};
将其传递给函数:
_app_check_and_request_permission("http://tizen.org/privilege/healthinfo",&health);
获取并检查结构体地址是否通过:
void _app_check_and_request_permission(const char *privilege,void *user_data)
{
health_s *p_health = user_data;
dlog_print(DLOG_INFO,LOG_TAG,"Health data: %s",p_health->data);
...
我在日志中看到“健康数据:步骤”。过得很好。然后我试图将 user_data 传递给回调函数
...
ppm_request_permission(privilege,_app_request_response_cb,p_health);
}
来自 Tizen 文档中的函数描述:
...
* @param[in] user_data User specific data which will be passed to
* the given callback.
int ppm_request_permission(const char *privilege,ppm_request_response_cb callback,void *user_data);
回调声明:
static void _app_request_response_cb(ppm_call_cause_e cause,ppm_request_result_e result,const char *privilege,void *user_data);
在回调中我得到健康数据:NULL。尝试将 p_health->data 传递给回调,没关系。问题在于传递整个结构。 我究竟做错了什么?谢谢。 更新: 在_app_check_and_request_permission 函数和回调中检查了传递结构的地址,它们是相同的。但是回调里面的struct还是空的...
解决方法
可能 health
的生命周期在系统完成请求后调用 _app_request_response_cb
之前已经结束。例如,如果 health
的显示定义包含在一个在请求完成之前返回的函数中,就会出现这种情况。简单的补救措施:用存储类 health
定义 static
。