本人在使用httpclient作接口測試的過程當中,遇到一個請求系統資源的接口。裏面每項資源都有一個version,邏輯是:若是第一次請求,version傳空,就會獲取最近的resource信息,若是穿了版本號,一致返回空表示不更新,不一致會更新本地的緩存數據。我寫了一個方法,第一次請求的時候會把版本號保存下載,第二次請求會這些版本號信息當作參數傳入,檢驗是否返回空。結果發現了一個jsonobject的問題,就是第一次請求的時候,傳null的參數並無帶上參數。通過查閱相關資料發現了,jsonobject若是在put方法的時候,value值是null,就隱藏該項,因此致使會從json數據中消失。java
下面放一下本身的代碼:編程
/** * 獲取系統靜態資源 * * 第一次獲取設置各個版本號,第二次直接使用版本號 * * @return */ public JSONObject getResource() { JSONObject response = null; String url = urls.getString("static_config"); JSONObject args = getParams(token); args.put("audio_country", ""); args.put("audio_label", ""); args.put("game_user_number", ""); args.put("banner", ""); args.put("video_open_time", ""); args.put("tip", ""); args.put("objective", objectiveVersion); args.put("startup_page", startupVersion); args.put("game", gameVersion); args.put("app", appVersion); args.put("gift", giftVersion); args.put("app_media_config", videoVersion); HttpGet httpGet = getHttpGet(url, args); output(args.size()); response = getHttpResponseEntityByJson(httpGet); // output(response); if (response.containsKey("dataInfo") && objectiveVersion.isEmpty()) { JSONObject dataInfo = response.getJSONObject("dataInfo"); objectiveVersion = dataInfo.getJSONObject("objective").getString("version"); startupVersion = dataInfo.getJSONObject("startup_page").getString("version"); gameVersion = dataInfo.getJSONObject("game").getString("version"); appVersion = dataInfo.getJSONObject("app").getString("version"); giftVersion = dataInfo.getJSONObject("gift").getString("version"); videoVersion = dataInfo.getJSONObject("video_open_time").getString("version"); } return response; }
在幾個版本號初始化的時候,由於是string類型的成員變量,因此默認值是null,致使請求不到數據。更改初始化值爲「""」便可,下面是初始化成員變量的代碼。json
public String objectiveVersion = "";// 目的頁版本號 public String startupVersion = "";// 啓動頁版本號 public String gameVersion = "";// 遊戲版本號 public String appVersion = "";// app更新配置版本號 public String giftVersion = "";// 禮物版本號 public String videoVersion = "";// 視頻版本號