【问题标题】:How to solve Error in json parsing using volley POST?如何使用 volley POST 解决 json 解析中的错误?
【发布时间】:2019-12-19 17:11:39
【问题描述】:

您好,我正在使用 volley 作为 JSON 解析。我正在使用 POST 方法并在发布请求中发送参数。解析数据时出现以下错误,出现以下错误。我想使用截击。我尝试过使用 JsonArrayRequest,但它不允许将参数作为 JSONObject 发送,我在代码中使用了它。

org.json.JSONArray cannot be converted to JSONObject

请求就像

{
    "city":"acd",
    "user_id":"82",
    "phone_number1":"1232131231",
    "my_type":"asf"
}

反应是这样的

[{
   "name":"dfdfd",
}]

以下是我的代码

 private void Search_Refer() {

        //initialize the progress dialog and show it
        progressDialog = new ProgressDialog(SearchReferNameActivity.this);
        progressDialog.setMessage("Please wait....");
        progressDialog.show();
        try {


            JSONObject jsonBody = new JSONObject();
            jsonBody.put("city", "acb");
            jsonBody.put("user_id", "82");
            jsonBody.put("phone_number1", "12332123231");
            jsonBody.put("my_type", "asf");

            JsonObjectRequest jsonOblect = new JsonObjectRequest(Request.Method.POST, Constants.BASE_URL1+"api/lab/search", jsonBody, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {


                    Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_LONG).show();
                    Log.e("Search EROOR", response.toString());



                    try {

                        JSONArray itemArray=new JSONArray(response);
                        dataModelArrayList = new ArrayList<>();
                        for (int i = 0; i < itemArray.length(); i++) {

                            SearchModel playerModel = new SearchModel();
                            JSONObject dataobj = itemArray.getJSONObject(i);

                            //playerModel.setProduct_name(dataobj.getString("name"));
                            playerModel.setRadiology_store_first_name(dataobj.getString("radiology_store_first_name"));


                            dataModelArrayList.add(playerModel);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }


                    progressDialog.dismiss();
                   /* Intent intent = new Intent(SearchReferNameActivity.this, SearchResult.class);
                    intent.putExtra("Search_result", dataModelArrayList);
                    startActivity(intent);*/

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                     Toast.makeText(getApplicationContext(), "Response:  " + error.toString(), Toast.LENGTH_SHORT).show();
                    System.out.println("Search Eroor"+error.toString());
                    progressDialog.dismiss();

                }
            }){
                @Override
                public String getBodyContentType() {
                    return "application/json";
                }

                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<String, String>();
                    headers.put("Authorization", "Bearer "+deviceToken);
                    return headers;
                }
            };

            jsonOblect.setRetryPolicy(new DefaultRetryPolicy(
                    10000,
                    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            MyApplication.getInstance().addToRequestQueue(jsonOblect,"postrequest");

        } catch (JSONException e) {
            e.printStackTrace();
        }
        // Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show();

    }

【问题讨论】:

  • 发出json数组请求
  • How to parse JSON in Java的可能重复
  • @ManoharReddy 如果你有 JSON Array 请求,那么如何发送参数?
  • @NewBeeAndy,从 new Response.Listener&lt;JSONObject&gt;()new Response.Listener&lt;JSONArray&gt;() 然后你会得到 JSONArray onResponse

标签: android http-post android-volley


【解决方案1】:

使用下面的代码

 StringRequest stringRequest = new StringRequest(Request.Method.POST, "api/lab/search", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("city", "abcd");
                params.put("user_id", "82");
                params.put("phone_number1", "01235467895");
                params.put("my_type", "asf");
                return params;
            }
        };

【讨论】:

  • 确实需要回答两次,你可以更新相同的答案
【解决方案2】:

将以下响应参数更改为 JSONArray

new Response.Listener&lt;JSONArray&gt;代替new Response.Listener&lt;JSONObject&gt;

// JSONArray insated of JSONObject
 public void onResponse(JSONArray response) {
}

【讨论】:

  • 你将如何添加参数??
  • 不改变请求将响应改为JsonArray。
  • 它给出了错误兄弟,尝试一次,让我知道。我已经试过了
【解决方案3】:

使用 JsonArrayRequestStringRequest 代替 JsonObjectRequest

JsonArrayRequest

【讨论】:

  • 我试过了,现在告诉我你将如何在 Jsonobject 中发送参数?
  • 使用 getParams 方法 @Override protected Map getParams() throws AuthFailureError { Map params=new HashMap(); params.put("city","abcd); params.put("user_id","82"); params.put("phone_number1","01235467895"); params.put("my_type","asf") ; 返回参数; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多