私はマーマレード・コアを使って最小限のアプリケーションを作成しました。 Webビューを作成し、s3eSecureStoragePut & s3eSecureStorageGetを使用して、保存および取得するデータを送信します。マーマレード・コア・ストレージ(s3eSecureStoragePut&s3eSecureStorageGet)が永続しない
これは、アプリケーションを閉じてから再び開くまで問題なく動作します。それが再びロードされ、データをロードしようとすると、空白として返されます。なぜ誰かがこれが起こっているかもしれない何か考えがありますか?ここに私のC++
#include "s3e.h"
#include "s3eDevice.h"
#include "IwDebug.h"
#include "s3eWebView.h"
#include "IwGx.h"
#include "Iw2D.h"
#include <string>
#include <sstream>
s3eWebView* webView;
bool pageLoaded;
const char* rom = "rom://index.html";
struct SStoreData {
std::string key;
};
static int loadedCallback(s3eWebView* instance, void* sysData, void* userData) {
pageLoaded = true;
return 1;
}
static int javaScriptCallback(s3eWebView* instance, void* systemData, void* userData) {
//cast the data to string for easier handling
std::string data = (char*) systemData;
char jsFunc[128];
//check if page has loaded to prevent errors
if (pageLoaded) {
if (!std::strncmp(data.c_str(), "saveKey", std::strlen("saveKey"))) {
std::string key = data.substr(data.find("|") + 1, data.length());
SStoreData *toSave = new SStoreData;
toSave->key = key;
s3eSecureStoragePut (toSave, sizeof (*toSave));
} else if ("loadKey" == data) {
SStoreData *toLoad = new SStoreData;
s3eSecureStorageGet (toLoad,sizeof(*toLoad));
sprintf(jsFunc, "dataLoaded(\"%s\", \"key\");", toLoad->key.c_str());
s3eWebViewSendJavaScript(webView, jsFunc);
} else {
IwTrace(JS_CALLBACK, ("DID NOT RECEIVE ANYTHING"));
}
}
return 1;
}
void init() {
//init vars
webView = s3eWebViewCreate(false);
pageLoaded = false;
//register callbacks
s3eWebViewRegister(S3E_WEBVIEW_FINISHED_LOADING, loadedCallback, NULL, webView);
s3eWebViewRegister(S3E_WEBVIEW_FROM_JAVASCRIPT, javaScriptCallback, NULL, webView);
//navigate to the webpage
s3eWebViewNavigate(webView, rom);
//display the webview
s3eWebViewShow(webView, 0, 0, IwGxGetDisplayWidth(), IwGxGetDisplayHeight());
}
void destroy() {
if (webView) {
s3eWebViewDestroy(webView);
webView = NULL;
//unregister callbacks
s3eWebViewUnRegister(S3E_WEBVIEW_FINISHED_LOADING, loadedCallback, webView);
s3eWebViewUnRegister(S3E_WEBVIEW_FROM_JAVASCRIPT, javaScriptCallback, webView);
}
delete rom;
//gives me warning so I'm leaving it out.
//delete pipHandler;
}
// Main entry point for the application
int main()
{
//Initialise graphics system(s)
//Initialise graphics system(s)
Iw2DInit();
//Init
init();
// Loop forever, until the user or the OS performs some action to quit the app
while (!s3eDeviceCheckQuitRequest()) {
//Update the input systems
s3eKeyboardUpdate();
s3ePointerUpdate();
// Your rendering/app code goes here.
// Sleep for 0ms to allow the OS to process events etc.
s3eDeviceYield(0);
}
destroy();
//Terminate modules being used
// Return
return 0;
}
、ここでは、WebViewの
<!DOCTYPE html>
<html>
<head>
<title>Storage Spike</title>
</head>
<body onload="main();">
<div>Loaded value:<span id="loadedKey">(loaded value goes here)</span></div>
<input type="text" id="inputKey" value="123key" placeholder="enter key to save"/>
<button id="saveKey">Save</button>
<button id="loadKey">Load</button>
<br>
<script>
function main()
{
var saveKey = document.getElementById("saveKey");
var loadKey = document.getElementById("loadKey");
var inputKey = document.getElementById("inputKey");
saveKey.addEventListener("click", function() {
var key = inputKey.value;
s3e.exec("saveKey|" + key);
});
loadKey.addEventListener("click", function() {
s3e.exec("loadKey");
});
}
function dataLoaded(data, type)
{
console.log(data);
console.log(type);
var loadedKey = document.getElementById("loadedKey");
if(type === "key")
loadedKey.innerHTML = data;
else
console.log("type error");
}
</script>
</body>
</html>
のHTML/JSのは、すべてのヘルプをいただければ幸いですアンドロイド
ためGCC ARMデバッグを使用して展開/構築され、
種類よろしく