当前位置: 首页 > 知识库问答 >
问题:

如何使用volley POST解决json解析中的错误?

龙学
2023-03-14

嗨,我使用截击作为JSON解析。我正在使用POST方法并在POST请求中发送参数。我在解析数据时遇到了以下错误,我遇到了以下错误。我想用截击。我尝试过使用JsonArrayRequest,但它不允许将参数作为JSONObject发送,我在代码中使用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();

    }

共有3个答案

席安康
2023-03-14

使用下面的代码

 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;
            }
        };
公冶宏深
2023-03-14

将以下响应参数更改为JSONArray

而不是新的响应。听众

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

澹台庆
2023-03-14

使用JsonArrayRequest或StringRequest代替JsonObjectRequest

JsonArrayRequest

 类似资料:
  • 问题内容: 我有以下JSON字符串来自外部输入源: 这是格式错误的JSON字符串(“ id”和“ value”必须用引号引起来),但无论如何我都需要对其进行解析。我已经尝试了simplejson和json- py,但似乎无法将其设置为解析此类字符串。 我正在Google App引擎上运行Python 2.5,因此任何基于C的解决方案(例如python-cjson)都不适用。 除了上面列出的JSON

  • 我正在使用来解析Json数据。我的Json数据如下: GsonParse.java 我使用以下方法来解析此JSON数据。 我面对以下错误。

  • 问题内容: 这段代码失败,并带有指示无效JSON的异常: 我可以通过用空字符串替换所有未定义内容来修复它。undefined不是JSON的一部分吗? 问题答案: 如果您可以解决这个问题,那么 令牌 实际上是未定义的。 请允许我详细说明:即使JavaScript具有称为undefined的特殊原始值,它 也不 是JavaScript关键字,也没有任何特殊含义。通过与定义对象进行比较,可以破坏测试对象

  • 问题内容: 我应该如何使用Node.js解析JSON?是否有一些模块可以安全地验证和解析JSON? 问题答案: 你可以简单地使用。 JSON对象的定义是ECMAScript 5规范的一部分。node.js基于Google Chrome的V8引擎构建,该引擎遵循ECMA标准。因此,node.js也有一个全局对象。JSON 注意- 可以占用当前线程,因为它是一种同步方法。因此,如果你打算解析大型JSO

  • 问题内容: 我想解析传入的JSON数据,例如: 我使用的代码是: 但是我无法分配任何东西给。有什么建议? 问题答案: 该响应是一个Map,具有单个元素,键为“ 212315952136472”。地图中没有“数据”键。如果要遍历所有条目,请使用以下命令: 如果您知道它是单元素地图,则可以直接访问: 而且,如果您知道ID(例如,如果您使用它来发出请求),则可以更简洁地访问该值:

  • 问题内容: 我正在尝试解析json对象并遇到问题。 我可以弄清楚如何获得这些值。我可以拿钥匙。请帮忙。 问题答案: 您不再拥有JSON对象,而拥有Python 字典 。遍历字典将产生其密钥。 如果要访问这些值,请为原始词典建立索引或使用返回不同内容的方法之一。