2014-01-16 44 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(); 
}