0

JavaScriptObjects を含む JavaScript-Arrays を html5 ストレージに保存する必要があります。これらの JavaScriptObjects の数は、配列内で多様化しています。保存された JavaScript 配列をストレージから読み取るときに、これらの配列に含まれる JavaScriptObject を表示したいと考えています。これを行うには、これらの配列の長さが必要ですが、「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: 例外がキャッチされました: 例外がキャッチされました: 例外がキャッチされました: int 以外の何かが JSNI メソッドから返されました '@com.google.gwt.core.client.JsArray::length( )': 型未定義の JS 値、予想される int

では、ストレージのデータを受け取った後に配列の長さを取得できないのはなぜですか? 私がそれをすべてやっている方法は正しいですか?解決策を見つけるのを手伝ってください。

4

1 に答える 1

0

私はそれを変更し、今は動作します!

  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();
}
于 2014-01-16T20:30:00.537 に答える