android2.3 gps上传数据后重启或是 JNIEnv* env = AndroidRuntime::getJNIEnv(); return == NULL

 

转载时请注明出处和作者文章出处:http://blog.csdn.net/lbmygf/archive/2011/06/16/6548086.aspx

作者:曼云-->孤峰

 

 

从android2.2 GPS到android2.3 GPS 结构上有些变化,这里主要说如题所讲的问题。(文件都在硬件抽象层自己找,呵呵)

 

对比一下2.2和2.3的回调函数发现2.3多了很多,其中有个很重要,(gps.h)

 

 

/** Callback for creating a thread that can call into the Java framework code.

 *  This must be used to create any threads that report events up to the framework.

 */

typedef pthread_t (* gps_create_thread)(const char* name, void (*start)(void *), void* arg);

 

 

就是这个了,看看他的解释This must be used 必须的用,不用不行,不用你就会出现标题中的问题,我看开始时也没看这些,郁闷了些

 

时间。

 

下面讲讲怎么用她:

 

 

在2.2时 static void  gps_state_init( GpsState*  state )  函数中       (gps_qemu.c)

 

 

有 if ( pthread_create( &state->thread, NULL, gps_state_thread, state ) != 0 ) {

        LOGE("could not create gps thread: %s", strerror(errno));

        goto Fail;

    }

这样一句对波,到2.3的时候 这句话就不行了,要退休了,2.2到2.3系统还是做了很多优化的,这个就是了,2.2的系统会轮询你有没有

 

创建线程,2.3不会了,你不告诉他,他就不知道,JNIEnv* env = AndroidRuntime::getJNIEnv();这句回去获取创建线程,不用回

 

调函数把线程传上去,上层不知道有这个线程,JNIEnv* env == NULL ,所以你把数据传上去时就出问题了,我遇到的现象是系统不

 

断重启,所以你要改。

 

首先:

 

 

static int

qemu_gps_init(GpsCallbacks* callbacks)

{

 

    GpsState*  s = _gps_state;

 

    s->callbacks = *callbacks;

 

 

    if (!s->init)

        gps_state_init(s);

 

    return 0;

}

 

 

把那 s->callbacks = *callbacks;放到gps_state_init(s);前面去

 

为什么呢?  你再 gps_state_init(s);中要用到回调函数上传线程啊,你不先给个接口给他,他怎么传啊。

 

然后:

 

就是把  

 

if ( pthread_create( &state->thread, NULL, gps_state_thread, state ) != 0 ) {

        LOGE("could not create gps thread: %s", strerror(errno));

        goto Fail;

    }

 

 

这句换成

 

state->callbacks.create_thread_cb("qemu_gps",  gps_state_thread, state);

 

第一个参数"qemu_gps"好像没啥特定意义,自己随便,没研究出来。其他的因该都知道哈。

 

恩,问题解决

AspNetForums 的汉化版和改写版,主要改写在于: 1、修改了邮件发送程序,设计了可发送需要身份验证的邮件发送组件。 2、设计了一个统一用户群组件(OneUsers.dll),只要你使用 OneUsers 的用户群(数据库可以使用我们的也可以使用你们自己的,我们提供 OneUsers 的数据库的 SQL 脚本),用户只要在加入本站用户群的任何一个论坛注册一次,就可以在其他论坛以同样的帐号登陆。 比如,你在 www.chinamvp.org 注册一次,那么你也可以用此帐号在 www.onebbs.net 登陆,而无需再次注册。 安装文档 1、必须安装MS SQL SERVER 2、必须安装.Net Framework + IIS 1、安装 MS SQL SERVER 论坛数据库文件 首先在 查询分析器里执行 aspnetforums_oneuser1.0.sql脚本安装论坛数据库 然后是 CreateDefaultData1.0.sql 安装默认数据 oneuser1.0.sql 是我们统一使用的用户群库,你可以不安装,而是使用我们的默认数据库,这个默认数据库在我们的服务器上。 如果你是英文系统 请执行 aspnetforums_oneuser1.0forEnSqlServer.sql 和 oneuser1.0forEnSqlServer.sql 但是不能保证论坛 能够正常执行 2、设置 AspNetForums 里的web.config <add key="connectionString" value="server=localhost; User ID=sa; Password=;database=aspnetforums" /> aspnetforums数据库 用户名和密码 <add key="connectionString" value="server=localhost; User ID=sa;database=OneUser" /> oneuser数据库 用户名和密码,你可以删除他或者注释掉,那么就是默认使用我们服务器上的统一用户库 3、设置邮件服务器 <add key="smtpServer" value="yourhost.com" /> <!-- Can specify SMTP Server to use to send out emails. Use "default" to use the default Windows 2000 SMTP Server --> <add key="ChinaASPXMailer" value="True" /> <!-- 如果你使用我们定制的邮件发送组件,请设为 True --> <add key="UserName" value="test@yourhost.com" /> <!--ChinaASPXMailer s UserName ,For Auth mail server --> <add key="Password" value="test" /> <!--ChinaASPXMailer s Password ,For Auth mail server --> <add key="Port" value="25" /> <!-- Port for ChinaASPXMailer s prot --> <add key="FromName" value="ChinaMVP.COM" /> <!-- FromName for ChinaASPXMailer s FromName --> <!--add key="Charset" value="GB2312" /--> <!-- FromName for ChinaASPXMailer s FromName ,Default value is gb2312 --> 把以上的 yourhost.com 改成你的邮件服务器 如果需要验证,请设置 UserName,否则 删除或者注释掉 4 、设置IIS,在你的web站点里设置一个虚拟目录 其物理目录指向 AspNetForums 目录。 5、解决方案 EngineAspNetForums.sln 6、管理员帐号: user:admin pwd:admin
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值