0
私はこれがHtmlJson.java内のバグであるか、私の実装であるかを判断しようとしています。私はちょうどPlayNバージョン1.2にアップグレードしました。私のコードはJson.Object
をJson.Writer
にロードしようとします。これはJavaバージョンで動作します。HTML版のPlayNでは、次のJSON処理コードで例外が発生するのはなぜですか?
これは以下のコードです。これは私のコードのバグであれば、どのように私はそれを修正する可能性がある
ERROR: Uncaught Exception:
java.lang.ClassCastException: com.google.gwt.core.client.JavaScriptObject$ cannot be cast to java.lang.String
at playn.html.HtmlJson$HtmlObject$.write$(HtmlJson.java:356)
at com.google.gwt.core.client.JavaScriptObject$.playn_core_Json$Object_write(JavaScriptObject.java)
at playn.core.json.JsonWriterBase.object(JsonWriterBase.java:119)
at playn.core.json.JsonWriterBase.object(JsonWriterBase.java:90)
at klenwell.sandbox.core.controllers.SandboxController.loadStoredData(SandboxController.java:121)
:
private void loadStoredData() {
// storage parameters
String storageKey = "jsonData";
Json.Object jsonData = PlayN.json().createObject();
// attempt to load stored data
String jsonString = PlayN.storage().getItem(storageKey);
// if not loaded, create stored data
if (jsonString == null) {
DemoApi.log("stored data not found");
jsonData.put("firstWrite", new Date().toString());
// else display data
} else {
jsonData = PlayN.json().parse(jsonString);
DemoApi.log("stored data loaded");
DemoApi.log("data first written at " + jsonData.getString("firstWrite"));
DemoApi.log("data last read at " + jsonData.getString("lastRead"));
DemoApi.log("data last written at " + jsonData.getString("lastWrite"));
}
// update last read
jsonData.put("lastRead", new Date().toString());
// write data
Json.Writer jsonWriter = PlayN.json().newWriter();
jsonWriter.object(jsonData); // <--- EXCEPTION RAISED HERE
jsonString = jsonWriter.write();
// store data as json
PlayN.storage().setItem(storageKey, jsonString);
// confirm
if (PlayN.storage().isPersisted()) {
DemoApi.log("data successfully persisted");
} else {
DemoApi.log("failed to persist data");
}
}
例外を:例外がライン(コード内のノートコメント)によって提起されましたか?
関連性のある追加の情報が1つ追加されています。 'JsonData'オブジェクトをログすると、ログに' INFO:[object Object] 'と表示されます。これは、[HtmlJson.java](http://code.google.com/p/playn/source/browse)の 'if(o == null || isValueString(o))'行の問題を指摘しているようです/html/src/playn/html/HtmlJson.java?name=playn-1.2#356)、特にisValueString関数です。それが 'false'であるべきであるときに' true'と評価されているようです。 – klenwell