91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-21 20:21:15 來源:腳本之家 閱讀:139 作者:lqh 欄目:移動開發

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);
              }
 ...            
            }
        }

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗城| 皋兰县| 张家界市| 桐柏县| 石家庄市| 伊金霍洛旗| 广元市| 来凤县| 宁都县| 象州县| 泰顺县| 花莲县| 双柏县| 清流县| 崇州市| 镇江市| 曲沃县| 嘉鱼县| 天水市| 玉树县| 台南县| 肥西县| 涞水县| 洪洞县| 海原县| 滁州市| 获嘉县| 甘孜| 宁南县| 洞口县| 高淳县| 赤壁市| 尼勒克县| 芜湖县| 新乐市| 洛浦县| 望城县| 开鲁县| 绥江县| 红原县| 湘乡市|