首页 > 解决方案 > JSONArray 需要更高的 API 级别,但在同一类中使用没有问题

问题描述

这是我在 Android Studio 中反复出现的问题。我将使用 JSONArray 类,它会告诉我“调用需要 API 级别 19(当前最小值为 15)”。奇怪的是,我可以在同一个班级的其他地方使用 JSONArray。

我尝试过的一些事情是清理和构建项目(什么都不做),重新启动 Android Studio(也没有解决这个问题),重写使用 JSONArray 的方法,或者移动它(这有时会起作用)

这是一个我没有得到问题的例子


private void makeApiCall(String text) {
        APICall.make(context, text, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                List<Employee> employees = new ArrayList<>();
                try {
                    JSONArray array = new JSONArray(response);
                    employees = new APIHelper().populateEmployeetList(array);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                autoAdapter.setData(employees);
                autoAdapter.notifyDataSetChanged();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
    }

这是一个我得到错误的例子

private void getJobs(String text){
        APICall.getJobsByPartial(context, text, new Response.Listener() {
            @Override
            public void onResponse(Object response) {
                try{
                    List<Function> functions = new ArrayList<>();
                    JSONArray jobs = new JSONArray(response);
                    functions = new APIHelper().populateFunctionList(jobs);

                    jobAdapter.setData(functions);
                    jobAdapter.notifyDataSetChanged();
                }
                catch (JSONException ex){
                    ex.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
    }

标签: javaandroidjson

解决方案


在您的第一个代码段中,response是一个String. 接受 a的JSONArray构造函数String从 API 级别 1 开始就已经存在。

在您的第二个代码片段中,response是一个Object. 接受 an的JSONArray构造函数Object从 API 级别 19 开始才出现。

在您的第二个代码片段中,APICall.getJobsByPartial()应该为您的回调提供比Object.


推荐阅读