亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

兴安盟| 深州市| 常山县| 罗定市| 名山县| 连江县| 称多县| 昌宁县| 桦甸市| 祥云县| 满城县| 汝南县| 类乌齐县| 内丘县| 徐闻县| 陇西县| 新巴尔虎右旗| 临清市| 凯里市| 宝鸡市| 泸水县| 资阳市| 莱阳市| 宁乡县| 厦门市| 四子王旗| 博野县| 昌宁县| 革吉县| 怀化市| 仙桃市| 读书| 荆门市| 霍邱县| 沧源| 新乡市| 屏边| 随州市| 巧家县| 上蔡县| 汶川县|