IBM Worklight - JSONStore在直接更新后无法初始化

时间:2014-05-13 11:27:34

标签: android ibm-mobilefirst jsonstore

我在Android 4.4“KitKit”中使用Worklight 6.0.0.2进行与JSONStore相关的修复。

除了一个问题之外它工作正常:在直接更新之后,应用程序重新启动,但JSONStore初始化失败;如果我们然后退出应用程序并重新启动,那么它运行良好。

在android 4.4中复制问题的步骤。 “奇巧”:

  1. 触发直接更新
  2. 允许应用程序在更新后自行启动

    然后你在LogCat中看到:

      

    05-13 16:28:57.010:E / jsonstore-core(16691):验证模式时出错   05-13 16:28:57.010:E / jsonstore-core(16691):java.lang.Throwable:node   名称“_id”已存在于架构05-13 16:28:57.010中:   E / jsonstore-core(16691):at   com.worklight.androidgap.jsonstore.database.DatabaseSchema.addNode(DatabaseSchema.java:124)

  3. 关闭应用程序。
  4. 重新启动它。
  5. 在initoptions.js内部

    var wlInitOptions = {
    connectOnStartup : false,
    heartBeatIntervalInSecs : 5,
    
    logger : {
        enabled : true,
        level : 'debug',
        stringify : true,
        pretty : false,
        tag : {
            level : false,
            pkg : true
        },
        whitelist : [],
        blacklist : []
    },
    analytics : {
        enabled : false
    },
    

    };

    内部JS文件:

     function wlCommonInit(){
         collections["Videos"] = {
         searchFields:{"BrandID":"string","VideoType":"string","CategoryID":"string","CourseID":"string","ISDeleted":"string","IsDownload":"string","VideoID":"string"}
            };
            var options = {"username":"*","password":"*","localKeyGen":false,"clear":false};
    
    WL.JSONStore.init(collections, options)
            .then(function (resp) {
            Brands=WL.JSONStore.get('Brands');
            Categories=WL.JSONStore.get('Categories');
            Courses=WL.JSONStore.get('Courses');
            Videos=WL.JSONStore.get('Videos');
            Notification=WL.JSONStore.get('Notification');
            UserInformationColl = WL.JSONStore.get('UserInformation');
            BrandListCollection = WL.JSONStore.get('BrandList');
            VideosList = WL.JSONStore.get('VideoList');
            BusinessType= WL.JSONStore.get('BusinessType');
    
            connectToServer();
        //  initializeAnalytics(2000,131);
    
                var query={"IsDownload":"2"};
                WL.JSONStore.get('Videos').find(query, {exact:true})
                .then(function (result2) {
                    if(result2.length > 0){
                        for(var i=0; i<result2.length; i++){
                            result2[i].json.IsDownload = 0;
                            Videos.replace(result2[i], {})
                            .then(function (numberOfDocumentsReplaced) {
                                WL.Logger.info("The number of document replaced are:--->"+numberOfDocumentsReplaced);
                            })
    
                            .fail(function (errorObject) {
                                WL.Logger.error("Error in document:---->"+errorObject);
                            });
                        }
                    }
                    errorvideodownloading();
                })
                .fail(function (errorObject) {
                    WL.Logger.debug('error' +errorObject.toString());
    
                });
            })
            .fail(function (errorObject) {
                 WL.Logger.error("init notification error:----->"+errorObject);
                 if(errorObject.err === -2){
                     WL.Logger.error("In the errorObject so destroying JSON store and recreating it.");
                     WL.JSONStore.destroy();
                     JsonStoreinit();
                     localStorage.clear();
                     connectToServer();
                }
                 else if(errorObject.err === 16)
                 {
                 hideSplashScreenPlatForm();
                 } 
            });
    }
    else{
        WL.Logger.debug('[JSONStore] Check your dependencies.');
    
    }
    }catch(e){
         WL.Logger.error("Exception is:--->"+e);
    }   
    

    }

1 个答案:

答案 0 :(得分:0)

我不确定你的初始代码。但是你会得到像

这样的错误
java.lang.Throwable: node with name "_id" already exists in schema 

当您使用该集合时,直到成功回调。

有关详细信息,请参阅this答案。