解决Android下QtQuick.LocalStorage和腾讯开放平台组件冲突问题

解决Android下QtQuick.LocalStorage和腾讯开放平台组件冲突问题

 

       已经有将近一个月没有写博客了,其实这段时间还是非常努力地进行开发的活动。最近也是在开发的过程中遇到了好一些问题,这些问题可以为自己或者是同行们提供一些启示或者是指导,所以我有必要记录下来,供大家参考。

       现象:我在Android上使用QtQuick的LocalStorage模块,但是发现我不管如何正确地使用SQL语句插入项目,下次读取的时候,总是显示数据库的相关表不存在。

       这个错误真的很诡异。我还专门写了一个例子程序,在Android两台设备上运行,结果都是没有问题的。最终例子程序是没有问题的,但是项目是有很大问题的。这究竟是怎么一回事呢?

       当时我真的很想进入Android系统使用相关软件查看一下SQLite的相关数据。不过Eclipse的DDMS在我的红米手机上,看不到/data/data这个目录,真是非常气恼。还好,我还有一台设备是root过了的,我就用另外一台Android设备查看/data/data/com.qtdream.com文件夹中究竟发生了什么事。结果发现,当程序启动的时候,/data/data/com.qtdream.app/files文件夹是存在的,当程序结束时,/data/data/com.qtdream.app/files文件夹就删除了。后面我仔细看了一下,files里面除了Qt的相关文件夹,竟然出现了腾讯的相关软件!如下图:

这是程序运行时候的截图:

这个是程序结束后的截图

       原因找到了!

       原因:因为我接入了腾讯的开放平台,在开始的时候,这个插件也向/data/data/com.qtdream.app/files写入文件,当程序结束的时候,它顺便把这个files文件夹删除掉了!

       腾讯真是过河拆桥啊。不管文件夹里还有其它文件,一个劲儿就删除了files这个文件夹!害得我查找错误半天。

解决办法就是单独设置一个离线文件的路径。我在main.cpp中是这么写的:

#ifdefined( Q_OS_ANDROID ) && !defined( Q_OS_ANDROID_NO_SDK )
    // 2015年11月01日19:07:02
    // 由于存在Android系统上腾讯的开放平台登录组件在程序结束的时候会删除
    // /data/data/com.qtdream.app/files这个文件夹,因此需要重新设定离线存储位置。
    // Default to"/data/data/com.qtdream.app/files/QML/OfflineStorage"
    // Will alter to "/data/data/com.qtdream.app/offlineStorage"
    QString offlineStoragePath =
            engine.offlineStoragePath( ).
            replace("files/QML/OfflineStorage", "offlineStorage" );
    QDir( offlineStoragePath ).mkpath("." );
    engine.setOfflineStoragePath(offlineStoragePath );
#endif

       这回真是吃一堑长一智了。

展开阅读全文

没有更多推荐了,返回首页