Volley ライブラリを使用して、Request オブジェクトを拡張し、GSON シリアライゼーションを実装しました。PUT
次に、いくつかのリクエストをどのように処理したいかについて、その新しいオブジェクトを拡張しました。これは、GSON シリアライゼーションの最初のオブジェクトです。
@Override
protected Response<t> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); //response may be too large for string?
t parsedGSON = mGson.fromJson(jsonString, cls);
Response <t> returnMessage = Response.success(parsedGSON,
HttpHeaderParser.parseIgnoreCacheHeaders(response));
return returnMessage;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return Response.error(new ParseError(e));
} catch (JsonSyntaxException je) {
je.printStackTrace();
Log.e("GsonRequest", je.getMessage()!=null?je.getMessage():"JsonSyntaxError");
return Response.error(new ParseError(je));
}
}
ネットワークの応答が にResponse <t> returnMessage = Response.success(parsedGSON, HttpHeaderParser.parseIgnoreCacheHeaders(response));
到達<t>
すると、すべての変数がエラーなしで完全にシリアル化されて渡された正しいクラスがオブジェクトに取り込まれました。しかし、何らかの理由で Volley がジャンプし、ブレークポイントのデバッグやログの出力で} catch (JsonSyntaxException je) {
の内容を明らかにすることができません。je
また、私の拡張クラスでは:
new ErrorListener() {
@SuppressWarnings("unused")
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
が呼び出されることはonErrorResponse
ありません(どちらも私のonResponse
セクションではありません)
したがって、シリアル化が成功したときに Volley が JSONException をキャッチする理由がわかりません。また、Volley が Error オブジェクトを返さない理由もわかりません。
洞察力に感謝