JsArray在接收到来自html5存储的数据后无法返回长度



我必须将包含JavaScriptObjects的JavaScript数组保存到html5存储中。这些JavaScriptObject的数量在数组中是多样化的。当我从存储中读取保存的JavaScripts数组时,我想显示这些数组中包含的JavaScriptObjects。要做到这一点,我需要这些数组的长度,但这是不可能的,因为我得到错误"除了int之外,还返回了其他东西",但只有当iam接收到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());  
}

现在我想从存储中保存的数组中读取person对象。

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::length()"返回了int以外的东西:未定义类型的JS值,应为int

那么,为什么在接收到存储的数据后无法获得阵列的长度呢?我做这一切的方式正确吗?请帮助找到解决方案。

我更改了它,它现在可以工作了!

  1. 将JsArray保存到存储中

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

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

最新更新