2014-01-16 33 views
0

我必须将包含JavaScriptObjects的JavaScript-Arrays保存到html5存储中。 这些JavaScriptObjects的数量在数组中多样化。 当iam读出保存的JavaScripts数组时,我想要显示包含在这些数组中的JavaScriptObjects。 要做到这一点,我需要这些数组的长度,但它不可能,因为我得到错误“其他被返回比int”的错误,但只有当我收到的HTML存储内容。 如果我把对象数组和阅读后的长度,它的工作方式类似于例如:JsArray从html5存储接收数据后无法返回长度

JsArray<Person> persons = JavaScriptObject.createArray().cast(); 
person.push(person1); 
person.push(person2); 
person.length(); // <---- this works 

这是第一次我的JavaScript对象

public class Person extends JavaScriptObject{ 

protected Person(){} 

    final public native void setName(String name)/*-{ 
     this.name = name; 
    }-*/; 

    final public native String getName()/*-{ 
     return this.name; 
    }-*/; 
} 

那我怎么把物品放入JsArray并保存进入存储

JsArray<Person> persons = JavaScriptObject.createArray().cast(); 
Person person = JavaScriptObject.createObject().cast(); 
person.setName("FirstName"); 
person.setLastname("LastName"); 
persons.push(person); 

// create more person objects 2 - 3 and adding tham into the person array 
persons.push(person2); 
persons.push(person3); 

// now save this array into storage 
if(Storage.isSupported()){ 
    storage = Storage.getLocalStorage(); 
    storage.setItem("1", new JSONObject(persons).toString()); 
} 

现在我想读出存储保存的数组中的人物对象。

JsArray<Person> persons; 

    if(Storage.isSupported()){ 
    storage = Storage.getLocalStorage(); 

     System.out.println("storage length : "+storage.getLength()); // <---- works gives 1 

     for(int i = 0; i < storage.getLength(); i++){ 
      int keynr = i+1; 
      String key = String.valueOf(keynr); 
      persons = JavaScriptObject.createArray().cast(); 
      array = JsonUtils.safeEval(storage.getItem(key)); // receiving the saved array from storage 

      array.get(0).getFirstName(); // works it showes the name 
      array.length(); // doesnt work 
    } 

} 

我收到以下错误信息:

com.google.web.bindery.event.shared.UmbrellaException:捕获到异常:捕获到异常:返回的东西比一个int其他:捕获到异常从JSNI方法的'@ com.google.gwt.core.client.JsArray :: length()':未定义类型的JS值,预期int

那么,为什么不可能获得数组的长度收到存储数据后? 它是如何正确的方式如何iam做这一切? 请帮忙寻找解决方案。

回答

0

我改变了它,现在它的作品!

  1. 保存JsArray到存储

     storage.setItem("1", new JSONArray(array).toString()); 
    

2.Read从存储该阵列出

private JsArray<Person> array = JavaScriptObject.createArray().cast(); 

JSONValue jsonValue = JSONParser.parseStrict(storage.getItem(key)); // key is 1 

JSONArray jsonArray = jsonValue.isArray(); 

for(int j = 0; j < jsonArray.size(); j++){ 
    JSONObject object = jsonArray.get(j).isObject(); 
    Person person = (Person) object.getJavaScriptObject(); 
    person.getName(); 
}