【问题标题】:Bad Request while parsing ArrayJson using Volley in Android Studio在 Android Studio 中使用 Volley 解析 ArrayJson 时出现错误请求
【发布时间】:2018-02-05 13:43:15
【问题描述】:

我也是 Android 的 JSON 解析新手,我尝试了在 Internet 上找到的教程以及如何解析 UnNamed Array 这是我的 Json 数组 (https://webservicesocs.herokuapp.com/api/DispoMachines),我想在 ListView 中解析并在 Android 中显示它 这是我在 Android 中使用 Volley 库的代码:

 String ServiceURL = "https://webservicesocs.herokuapp.com/api/DispoMachines";
    machinesListVeiw = (ListView) findViewById(R.id.machines_lv);
    final String result = "";
    final ArrayList<Machine> machines = new ArrayList<>();
    JsonObjectRequest jsonObjReq  = new JsonObjectRequest(Request.Method.GET, ServiceURL, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {
                JSONArray json = new JSONArray(result);

                for(int i=0;i<json.length();i++){
                    JSONObject e = json.getJSONObject(i);
                    Machine machine = new Machine();
                    machine.setMachineId(e.getString("MachineId"));
                    machine.setStatut(e.getString("Statut"));
                    machine.setMachineImage(e.getString("MachineImage"));
                    machine.setTempsResteEnMinutes(e.getString("TempsResteEnMinutes"));
                    machines.add(machine);
                }
                MachineAdapter arrayAdapter = new MachineAdapter(AvaiableMachinesActivity.this, machines);
                machinesListVeiw.setAdapter(arrayAdapter);

            } catch (JSONException e) {
                Toast.makeText(AvaiableMachinesActivity.this, "BAD JSON ", Toast.LENGTH_SHORT).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Toast.makeText(AvaiableMachinesActivity.this, "BAD REQUEST", Toast.LENGTH_SHORT).show();
        }
    });
    AppController.getInstance(AvaiableMachinesActivity.this).addToRequestQueue(jsonObjReq);

**我收到 BAD REQUEST 的错误,所以这是 Volley Library 造成的 ErrorResponse **

【问题讨论】:

  • 你有上网权限吗??
  • 是的,我在清单中添加了这一行
  • @HelmiChardon 请检查我的以下答案。
  • 现在这是一个糟糕的 Json 不是一个糟糕的请求..
  • 它对我来说不起作用,它是一个糟糕的 Json,在这个级别上不是一个糟糕的请求

标签: android json rest parsing android-volley


【解决方案1】:

您的 json 响应以 JSONArray 开头,您可以将请求更改为 JSONArray。

 String ServiceURL = "https://webservicesocs.herokuapp.com/api/DispoMachines";
    machinesListVeiw = (ListView) findViewById(R.id.machines_lv);
    final String result = "";
    final ArrayList<Machine> machines = new ArrayList<>();

JsonArrayRequest req = new JsonArrayRequest(urlJsonArry,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());

                    try 
                    {
                        // Parsing json array response
                        // loop through each json object

              for(int i=0;i<response.length();i++)
              {
                  JSONObject e= (JSONObject) response.get(i);

                  Machine machine = new Machine();
                  machine.setMachineId(e.getString("MachineId"));
                  machine.setStatut(e.getString("Statut"));
                  machine.setMachineImage(e.getString("MachineImage"));
       machine.setTempsResteEnMinutes(e.getString("TempsResteEnMinutes"));
                  machines.add(machine);
             }
              MachineAdapter arrayAdapter = new MachineAdapter(AvaiableMachinesActivity.this, machines);
              machinesListVeiw.setAdapter(arrayAdapter);
                    }
                    catch (JSONException e) {
                        e.printStackTrace();

                    }

                    hidepDialog();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());

                }
            });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(req);

【讨论】:

  • 它现在是一个糟糕的 Json :/
  • W/System.err: org.json.JSONException: Not a original array: class org.json.JSONArray this error
  • 您可以查看我的编辑答案。解析 json 数组响应并循环执行每个 json 对象。我编辑我的答案,请检查。
  • @HelmiChardon 谢谢,很高兴为您提供帮助。
【解决方案2】:

检查manifest 中是否有internet permission 并使用getString("Staut") 而不是getString("Statut")...它将通过NPException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多