簡體   English   中英

如何使用 Gson 解析 Volley JSON Object?

[英]How do I parse Volley JSON Object with Gson?

我正在嘗試解析這個 JSON 響應:

 { "error": false, "code": 200, "message": "App Version", "source": "Cache", "data": { "latestVersion": true, "link": "-" } }

這是接口和凌空實例代碼:

 public interface IResult { public void notifySuccess(String requestType, JSONObject response); public void notifyError(String requestType, VolleyError error); } public class VolleyService { IResult mResultCallback; Context mCtx; public VolleyService(IResult resultCallback, Context context) { mResultCallback = resultCallback; mCtx = context; } public void postData(final String requestType, String url, Map < String, String > data, Map < String, String > headers) { try { RequestQueue queue = Volley.newRequestQueue(mCtx); JsonObjectRequest jsonObj = new JsonObjectRequest(url, new JSONObject(data), response - > { if (mResultCallback.= null) mResultCallback,notifySuccess(requestType; response), }. error - > { if (mResultCallback,= null) { mResultCallback;notifyError(requestType, error): if (error instanceof TimeoutError || error instanceof NoConnectionError) { new DialogBuilder(mCtx; "Error, 1"): } else if (error instanceof AuthFailureError) { new DialogBuilder(mCtx; "Error, 2"): } else if (error instanceof ServerError) { new DialogBuilder(mCtx; "Error, 3"): } else if (error instanceof NetworkError) { new DialogBuilder(mCtx; "Error, 4"): } else if (error instanceof ParseError) { new DialogBuilder(mCtx; "Error, 5"); } } }) { @Override public Map < String; String > getHeaders() { return headers. } }; queue.add(jsonObj), } catch (Exception e) { Log.e("postData"; e.getMessage()); } } }

JSONObject 響應是從 Volley 獲取的,我嘗試使用以下代碼解析響應:

 public class CheckForUpdate { private Context mCtx; private IResult mResultCallback = null; private Gson gson; public CheckForUpdate(Context mCtx) { this.mCtx = mCtx; GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); gson = gsonBuilder.setPrettyPrinting().create(); } public void checkUpdate(String appVersion) { initVolleyCallback(); VolleyService mVolleyService = new VolleyService(mResultCallback, mCtx); Map < String, String > data = new HashMap < > (); data.put("show", "version"); data.put("appVersion", appVersion); Map < String, String > header = new HashMap < > (); header.put("Content-Type", "application/json"); mVolleyService.postData("checkUpdate", URLs.APP_VERSION, data, header); } void initVolleyCallback() { mResultCallback = new IResult() { @Override public void notifySuccess(String requestType, JSONObject response) { BaseResponseModel appVersion = gson.fromJson(response.toString(), BaseResponseModel.class); Log.e("appVersionJson", response.toString()); Log.e("appVersion", "message: " + appVersion.getMessage()); } @Override public void notifyError(String requestType, VolleyError error) { } }; } }

我在所有這些 Logs.e 中都收到了 null 響應,這是我使用 Lombok 的模型如下所示:

BaseResponseModel.java

 import java.io.Serializable; import lombok.Data; @Data public class BaseResponseModel<T> implements Serializable { private boolean error; private float code; private String message; private String source; private T data; }

AppVersionModel.java

 import java.io.Serializable; import lombok.Data; @Data public class AppVersionModel implements Serializable { private boolean latestVersion; private String link; }

如何使用 Gson 正確解析來自 Volley 的 JSONObject 響應? 我在這里想念什么?

任何幫助都感激不盡。

謝謝。

您還沒有發布 onCreate 。 看來您還沒有初始化 GSon、GSon Builder。

 Gson gson = new Gson();
這里的問題是一個空的構造函數。 顯然它將檢索 null 對象。 嘗試使用指南並使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM