CCUserDefaultAndroid.cpp存储问题

原创 2013年12月04日 21:14:28


CCUserDefaultAndroid.cpp中为了兼容新旧版本的存储:即使用自己的UserDefault.xml和android上的sharepref,但在使用上不留神就会导致很严重的问题的。

背景:

在游戏中一般需要保存一些变量,比如说是否客气背景音等的用户设置。cocos2d-x中CCUserDefaultAndroid.ccp中是存储时操作的代码,其中把key和value保存在UserDefault.xml中。

问题:

在原有的模式是读取key是先判断这个key是否存在,无论这个值是string还是bool类的,如:

  lua中 if CCUserDefault:sharedUserDefault():getStringForKey("isBackGroundMusicPlaying") == "" 

在已有的改key的情况下,CCUserDefault::getStringForKey这个方法中调用CCUserDefault::setStringForKey的方法,在获取到对应的时,继续往下执行setStringForKeyJNI来回到android中保存这个key-value到share_pref中Cocos2dxPrefsFile.xml中,并且该条记录为string类型的。

因此假如你的记录为bool的情况下,这个判断会导致在android中保存这个key-value为string类型,当你下次调用setBoolForKey时,代码中会再次把相同的key-value保存的类型为bool类的,这个跟前面的保存为string类型产生冲突,一般情况log显示为“ Invalid indirect reference 0x40d07028 in decodeIndirectRef”等错误信息。

解决方法:

第一,可以选择直接在CCUserDefaultAndroid.cpp文件中把兼容的宏KEEP_COMPATABILITY取消定义,直接使用android的sharepref来存储。

第二,使用原来的存储,不用android的sharepref来存储,在setXXX的方法后面调用deleteNodeByKey后面return回去,不用调用后面的jni回调android那边的保存到sharepref中。

存储管理.cpp

  • 2015年06月29日 11:22
  • 6KB
  • 下载

C002-CPP-用malloc()存储任意长度的键入字符串

使用malloc()申请空间来存储任意长度的键入字符串

第9周项目2 - 对称矩阵压缩存储的实现与应用(2).cpp

/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第9周项目2 - 对称矩阵压缩存储的实现与应用(2).cpp 作 者:...

二叉树二叉链表存储结构 <函数实现:BiTreeFun.cpp>

二叉树二叉链表存储结构 二叉树二叉链表存储结构《头文件:#include "BiTreeHead.h"》 //-------- 函数实现:BiTreeFun.cpp //-------- 二...

(2011.11.11) 4_a1.cpp -- 下三角矩阵的压缩存储定义

源代码:// 4_a1.cpp -- 下三角矩阵的压缩存储定义 /* * -> 题目要求: * 1.已知矩阵A[5][5]是一个下三角矩阵,如下图 * 1 0 0 0 0 ...
  • neicole
  • neicole
  • 2011年11月11日 13:36
  • 2420

图的邻接表存储 cpp实现

转载自 点击打开链接 用到的数据结构是 一个是顶点表,包括顶点和指向下一个邻接点的指针 一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针 ...

(2011.11.28) 04_字符串的顺序结构存储.cpp

// 04_字符串的顺序结构存储.cpp /** * 1. 串:串是由零个或多个字符组成的有限连续序列。 * 2. 串的逻辑结构与线性表极为相似,区别仅在于串的数据对象约束为字符集。 ...
  • neicole
  • neicole
  • 2011年11月28日 19:05
  • 1198

背包问题.cpp

  • 2012年12月11日 22:21
  • 797B
  • 下载

迷宫问题C语言.cpp

  • 2008年10月16日 15:32
  • 1KB
  • 下载

安卓打包 有关Android.mk 引入.cpp .c文件路径问题

问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的就是LOCAL_SRC_FILES源文件列表. 考虑有如下源文件分布的情况: cpp文件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CCUserDefaultAndroid.cpp存储问题
举报原因:
原因补充:

(最多只允许输入30个字)