我必須將包含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做這一切? 請幫忙尋找解決方案。