国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android getJSONObject與optJSONObject的區別結合源碼分析

2019-10-23 19:45:06
字體:
來源:轉載
供稿:網友

Android getJSONObject與optJSONObject的區別結合源碼分析

json解析常見問題:

getJSONObject與optJSONObject的區別,下面結合源碼和案例來分析當我們使用這兩周方法來解析數據時,哪種比較好.

源碼分析:

//使用getJSONObject時,如果返回的對象不是JSONObject,拋出JSONException異常  /**   * Returns the value mapped by {@code name} if it exists and is a {@code   * JSONObject}.   * @throws JSONException if the mapping doesn't exist or is not a {@code   *   JSONObject}.   */  public JSONObject getJSONObject(String name) throws JSONException {    Object object = get(name);    if (object instanceof JSONObject) {      return (JSONObject) object;    } else {      throw JSON.typeMismatch(name, object, "JSONObject");    }  }//使用optJSONObject時,當返回結果不是JSONObject時,這里不會拋異常,而是返回null  /**   * Returns the value mapped by {@code name} if it exists and is a {@code   * JSONObject}. Returns null otherwise.   */  public JSONObject optJSONObject(String name) {    Object object = opt(name);    return object instanceof JSONObject ? (JSONObject) object : null;  }

結合項目代碼分析使用場景

 /**  * 偽代碼如下  **/  public class GetGoodsCollectListFactory {    private String ERROR_MSG = "errorMsg";    private String ERROR_CODE = "errorCode";    private String RESULT   = "result";    /**     * 商品列表,解析獲取到的json數據     *     * @param param     * @return     */    public CollectListInfo getGoodsCollectListParse(String param) {      String BOOK_MARK_BO_LIST = "favorGoodsList";      CollectListInfo collectList = new CollectListInfo();      List<CollectInfo> list = new ArrayList<CollectInfo>();      ResponseInfo responseInfo = null;      CollectInfo info = null;      try {        // 請求獲取json結果        JSONObject jsonObject = new JSONObject(HttpRequestClient.executeRequest(Constant.Url.GET_FOLLOW_GOODS_URL, param, true));        responseInfo = new ResponseInfo();        if (jsonObject.getBoolean(RESULT)) {          responseInfo.setResult(true);          JSONArray jsonArray = jsonObject.getJSONArray(BOOK_MARK_BO_LIST);          collectList.setTotalPage(jsonObject.getInt(Constant.TOTAL_PAGE_NAME));          for (int i = 0; i < jsonArray.length(); i++) {            info = collectList.getCollectInfo();            SONObject object = jsonArray.getJSONObject(i);            JSONArray activityItemList = object.optJSONArray("activityItemList");            ArrayList<ActivityCollectInfo> activityCollectInfos = new ArrayList<ActivityCollectInfo>();            //因為object.optJSONArray("activityItemList");如果解析不到會直接返null            if (activityItemList != null && activityItemList.size() > 0) {              for (int j = 0; j < activityItemList.length(); j++) {                //使用optJSONObject(i)會莫名解析不了下面數據:如optString("activityId"));                // 當activityid為null時,不會拋錯,但是下面的方法不走,因此換用getJSONObject(i);                //JSONObject activityItemobj = activityItemList.optJSONObject(i);                JSONObject activityItemobj = activityItemList.getJSONObject(i);                ActivityCollectInfo activityCollectInfo = new ActivityCollectInfo();                activityCollectInfo.setActivityId(activityItemobj.optString("activityId"));                activityCollectInfo.setActivityName(activityItemobj.optString("activityName"));                activityCollectInfo.setActivityType(activityItemobj.optInt("activityType"));                activityCollectInfo.setLargessFlag(activityItemobj.optInt("largessFlag"));                activityCollectInfo.setLargessMoney(activityItemobj.optInt("largessMoney"));                activityCollectInfo.setLargessNumber(activityItemobj.optInt("largessNumber"));                activityCollectInfos.add(activityCollectInfo);              } ...                        }        }

溫故而知新,可以為師矣.


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂州市| 宕昌县| 大庆市| 仪陇县| 秀山| 青海省| 大同市| 安远县| 托克逊县| 左贡县| 滨州市| 武安市| 平潭县| 苏尼特左旗| 岚皋县| 凭祥市| 搜索| 新昌县| 海伦市| 怀来县| 黄浦区| 沁水县| 渝北区| 岐山县| 新龙县| 交口县| 肥西县| 灵丘县| 巴彦淖尔市| 南木林县| 大余县| 宜黄县| 柞水县| 河池市| 广宁县| 江油市| 宜城市| 定远县| 西峡县| 阿勒泰市| 民权县|