【问题标题】:How to properly initialize the JSON store in Worklight 6.1如何在 Worklight 6.1 中正确初始化 JSON 存储
【发布时间】:2014-03-02 23:39:39
【问题描述】:

我正在尝试如下初始化 IBM Worklight JSON 存储:

//JSONStore jsonStoreCollection metadata
var jsonStoreCollection = {};

//JSONStore jsonStoreCollection metadata
var COLLECTION_NAME = 'people';

function wlCommonInit(){


    // Create empty options to pass to
    // the WL.JSONStore.init function
    var options = {};

    //Define the collection and list the search fields
    jsonStoreCollection[COLLECTION_NAME] = {
        searchFields : {name: 'string'},
    };


    //Initialize the JSON store collection
    WL.JSONStore.init(jsonStoreCollection, options)
    .then(function () {
        console.log("Successfully Initialized the JSON store");
    })
    .fail(function (errorObject) {
        console.log("JSON store init failed :( ");
    });

}

但是当我在我的 android 模拟器中运行它时,logcat 会给我“JSON 存储初始化失败”消息。并出现以下错误:

[wl.jsonstore {"src":"initCollection", "err":-2,"msg":"PROVISION_TABLE_SEARCH_FIELDS_MISMATCH","col":"token","usr":"jsonstore","doc":{},"res":{}}

此实现似乎与文档中概述的非常相似,但是我无法对其进行初始化。

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • 您是否尝试过按原样运行 JSONStore 示例? public.dhe.ibm.com/software/mobile-solutions/worklight/docs/…
  • 是的,我还阅读了示例页面中的两个 PDF 文档。您可能会看到这段代码 sn-p 与示例中的代码非常相似。
  • 我发现了我的问题。我之前在同一个 Android 模拟器上创建了一个名称相同但初始化变量不同的 JSON 存储。卸载 Worklight 应用程序后,JSON 存储初始化很好。因此,如果有人在代码看起来没问题时遇到类似问题.. 尝试卸载。
  • 你应该把它写成答案而不是评论。谢谢

标签: ibm-mobilefirst jsonstore


【解决方案1】:

带有错误代码的文档是here

-2 PROVISION_TABLE_SEARCH_FIELDS_MISMATCH

搜索字段不是动态的。不调用就无法更改搜索字段 WL.JSONStore 中的 destroy 方法或 removeCollection 方法 在使用新的搜索字段调用 init 方法之前创建类。这 如果更改搜索字段的名称或类型,可能会发生错误。 例如: {key: 'string'} 到 {key: 'number'} 或 {myKey: 'string'} 到 {theKey: 'string'}。

无需卸载应用程序,只需按照文档操作并通过调用removeCollectiondestroy 处理该错误情况。例如:

WL.JSONStore.init(...)
.then(function () {
  //init was successful
})
.fail(function (error) {
  //check for -2
  //call removeCollection or destroy
  //re-init with new search fields
});

您可以随时submit a feature request 来简化此操作。

【讨论】:

  • 谢谢cnandreu。这是一个非常有用且有用的答案。
  • 我不认为我们可以在不调用 init 的情况下删除Collection 吗?
  • @SachinThapa 是正确的:removeCollection 仅适用于 Collection 句柄,由于 init 无法正常工作,因此我们无法获得该句柄。我能想到的唯一解决方法是使用旧的搜索字段集进行初始化,然后删除集合并使用新的搜索字段进行初始化。
【解决方案2】:

如果您之前创建了一个名称相同但初始化变量不同的 JSON 存储。您必须卸载该应用程序。

卸载后,您可以将应用程序重新部署到设备上,JSON 存储将按预期初始化。

自从发现此问题后,我在 Worklight 应用程序中更改 JSON 存储的配置时,又多次看到此问题。

【讨论】:

  • 您不必卸载它。在您的情况下,您尝试使用不同的搜索字段对其进行初始化,初始化后无法更改。但是如果你想改变它们,你必须先从存储中删除集合(pic.dhe.ibm.com/infocenter/wrklight/v6r1m0/…),然后重新初始化。错误在这里解释:pic.dhe.ibm.com/infocenter/wrklight/v6r1m0/topic/…
  • @Daniel Gonzalez,您必须卸载它(或擦除用户数据)。我只是试图将我的 apk 重新部署到设备上,这对于本机应用程序来说不是问题。通过常规的 android 部署,您可以在代码中更改与存储选项 developer.android.com/guide/topics/data/data-storage.html 相关的内容并重新部署到设备,就像魔术一样,存储会按照您的预期进行更新。使用 Worklight,之前的部署仍然存在并且会出现问题。我不是试图从同一个部署中初始化 json 存储两次。
猜你喜欢
  • 2014-11-20
  • 2014-05-11
  • 2021-09-16
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2010-11-11
  • 2017-05-11
相关资源
最近更新 更多