JSON文件加载问题

时间:2011-04-08 09:26:34

标签: iphone json file load titanium

我目前正处于这个问题,如果有人可以给我一些指示或最佳实践,那将会很棒。 Titanium SDK版本:1.6.1 iPhone SDK版本:4.2

我的应用程序执行以下操作,它正在获取用于同步我的SQLite数据库的远程JSON文件,但该应用程序在解析文件时出现此错误

[INFO] Due to memory conditions, 0 of 0 images were unloaded from cache.

使用较小的JSON文件时一切正常,但现在文件达到7MB,我的代码退出了我。

这是因为钛JSON解析限制吗?由于动态内容,我无法为数据库提供应用程序安装。所以这已经是一个被排除在外的解决方案。

代码:

function syncDatabase() {
    if ((Titanium.Network.networkType != Titanium.Network.NETWORK_NONE)) {
        Ti.API.info("There is network connection, trying to update database..");
        var conn = Ti.Network.createHTTPClient(); 
        conn.setTimeout(20000);
        var lastUpdated = Ti.App.Properties.getInt("lastUpdated");
        conn.open('GET', 'http://example.com/get/all/' + lastUpdated);
        filename = "db";
        conn.onload = function(){
            try {
                if (conn.status == 200)
                  {
                    var f = Ti.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,filename);
                    f.write(this.responseData);     
                  }
                  fillDatabase();
                }
            catch(e) {
            }
        }; 
        conn.send();
    }
}

function fillDatabase()
{
    try {
        var file = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory + "/db");
        var json = JSON.parse(file.read().text);   
        var db = Titanium.Database.open('db');
        for( i=0; i < json.length; i++){
            Ti.API.info("Found foobar: With id ["+json[i].id+"] ["+json[i].foo+"]");
            var syncid = json[i].id;
            var foo = json[i].foo;
            var bar = json[i].bar;
            db.execute('REPLACE INTO objects (id,foo,bar) VALUES (?,?,?)',syncid,foo,bar);
    }
    Ti.App.Properties.setInt('lastUpdated', Math.floor(new Date().getTime()/1000));
    db.close();
    }
    catch(e) {
        Ti.API.info("THERE IS AN ERROR UPDATING THE DATABASE");
    }
}

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我实际上不知道,但你的意思是什么

  

动态内容

? 通常它也应该与你的数据库一起工作