从html5存储接收数据后,JsArray无法返回长度

时间:2014-01-16 09:20:10

标签: java javascript gwt mgwt

我必须将包含JavaScriptObjects的JavaScript-Arrays保存到html5存储中。 这些JavaScriptObjects的数量在数组中多样化。 当iam从存储中读出已保存的JavaScripts-array时,我希望显示包含在这些数组中的rj的JavaScriptObjects。 要做到这一点,我需要这些数组的长度,但它不可能,因为我得到错误“其他东西被返回比一个int”,但只有当我接收到html存储的内容。 如果我将对象放在数组中并在之后读取长度,它就像示例:

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:捕获异常:捕获到异常:捕获到异常:从JSNI方法'@ com.google.gwt.core.client.JsArray返回了除int之外的其他内容: :length()':未定义类型的JS值,预期为int

那么为什么在收到存储数据后无法获得数组的长度? 它甚至纠正了我如何做到这一切的方式? 请帮助找到解决方案。

1 个答案:

答案 0 :(得分:0)

我改了它现在有效了!

  1. 将JsArray保存到存储

         storage.setItem("1",  new JSONArray(array).toString());
    
  2. 2.从存储中读出该数组

    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();
    }