本文介绍了如何获取JSON中的特定元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有如下所示的JSON:

If I have a JSON like below:

{
  "Division": [
      {
        "DivisionId": 1,
        "DivisionName" : "A"
      },
      {
        "DivisionId": 2,
        "DivisionName" : "B"
      }
  ],
 "Title": [
     {
       "TitleId": 11,
       "Title": "Title 1"
     },
     {
       "TitleId": 12,
       "Title": "Title 2"
     }
  ]
}

如何仅在内部包含值的情况下获取Division?我想要实现的是将Division的值放入我的ArrayList中.我正在使用Volley获取JSON结果,而我尝试的是在onResponse上使用的JSONArray divisionArr = response.getJSONArray("Division");并将其循环到这里,这是我的代码

How can I get the Division only with its values inside? What I'm trying to achieve is to put the values of Division inside my ArrayList. I'm using Volley to get the JSON result and what I tried is on the onResponse I used JSONArray divisionArr = response.getJSONArray("Division"); and loop it here's my code

 JSONArray divisionArr = response.getJSONArray("Division");

                for (int i = 0; i < divisionArr.length(); i++) {
                    Division division = new Division();
                    JSONObject divisionObj = (JSONObject) divisionArr.get(i);

                    division.setId(divisionObj.getInt("DivisionId"));
                    division.setName(divisionObj.getString("DivisionName"));

                    divisionArrayList.add(division);
                }

但是我遇到错误ParseError,我可能做错了,但是我不知道这是什么.请帮忙,谢谢.

But I'm having an error ParseError, I maybe doing it wrong, but I don't know what is it. Please help, thank you.

////////这是我的Volley request

///////Here's my Volley request

public void getData(Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {

    try{

        String syncCall = Constants.VOLLEY;

        request = new JsonObjectRequest(Method.GET,
                syncCall,
                null,
                listener,
                errorListener);

        request.setRetryPolicy(
                new DefaultRetryPolicy(
                        60000,//DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, // 2500
                        1,//DefaultRetryPolicy.DEFAULT_MAX_RETRIES, // 1
                        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); //1f

        mRequestQueue.add(request);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

然后在我的活动中

  private void callSyncVolley() {

    final ProgressDialog pd = new ProgressDialog(this);
    pd.setMessage("Fetching data....");
    pd.show();

    Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray divisionArr = response.getJSONArray("Division");

                for (int i = 0; i < divisionArr.length(); i++) {
                    Division division = new Division();
                    JSONObject divisionObj = (JSONObject) divisionArr.get(i);

                    division.setId(divisionObj.getInt("DivisionId"));
                    division.setName(divisionObj.getString("DivisionName"));

                    divisionArrayList.add(division);
                }

                pd.dismiss();

            } catch (JSONException e) {
                e.printStackTrace();
                Log.e(TAG, "Error: " + e.getMessage());
                pd.dismiss();
            }
        }
    };

    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            if (error.networkResponse != null) {
                Log.d(TAG, "Error Response code: " + error.networkResponse.statusCode);
                pd.dismiss();
            }
            if (error instanceof TimeoutError || error instanceof NoConnectionError) {
                Log.d(TAG, "Error Response code: Timeout/NoConnection");
                pd.dismiss();
            } else if (error instanceof AuthFailureError) {
                //TODO
                Log.d(TAG, "Error Response code: AuthFailureError");
                pd.dismiss();
            } else if (error instanceof ServerError) {
                //TODO
                Log.d(TAG, "Error Response code: ServerError");
                pd.dismiss();
            } else if (error instanceof NetworkError) {
                //TODO
                Log.d(TAG, "Error Response code: NetworkError");
                pd.dismiss();
            } else if (error instanceof ParseError) {
                //TODO
                Log.d(TAG, "Error Response code: ParseError");
                pd.dismiss();
            }
        }
    };

    VolleyRequestManager.getInstance().doRequest().getData(listener, errorListener);
}

错误仅显示Error Response code: ParseError

推荐答案

我终于正确了,我重新编码了整个代码,检查了json结果,这是我的代码

I finally got it right, I recode the whole thing, checked my json result and here's my code

Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {

                JSONArray divisionArr = response.getJSONArray("Division");

                if(!divisionArr.equals(null)){
                    for(int i = 0; i < divisionArr.length(); i++){
                        Division division = new Division();
                        JSONObject divisionObj = (JSONObject) divisionArr.get(i);

                        division.setId(divisionObj.getInt("DivisionId"));
                        division.setName(divisionObj.getString("DivisionName"));

                        divisionList.add(division);
                    }
                }

                pd.dismiss();

            } catch (JSONException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(),
                        e.getMessage(), Toast.LENGTH_SHORT).show();
                pd.dismiss();
            }

        }
    };

这篇关于如何获取JSON中的特定元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-17 17:50
查看更多