Json 数据数组请求不断跳过onResponse

Json data array request keeps skipping onResponse

我一直在努力查找并找到解决问题的方法。

我正在用 URL 中的 json 数据填充 SpinnerJson 数据是无名的,我正在尝试将数据放入 ArrayList 这样我就可以填充 Spinner

每当我 debug 我可以看到它在制作 StringRequestJSONArrayRequest 后跳过我的 onResponse() 方法,请查看我的代码,看看我是什么做错了

yearsp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(ySelect)
            {
                selectedYear = yearsp.getSelectedItem().toString();

                URL1 = URL + "/" + selectedYear;
                loadSpinnerDataMake();

                adapterMake.clear();
                adapterMake.addAll(makesName);

            }
            else
                ySelect = true;

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });


String URL1 = http://carmakemodeldb.com/vehicle/makes/2011 //this is here for you to see the link
public void loadSpinnerDataMake()
{
    makesName = new ArrayList<String>();

    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(URL1, new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
        try {

            for (int x = 0; x < response.length(); x++) {
                JSONObject obMake = response.getJSONObject(x);
                String nMake = obMake.getString("make");
                makesName.add(nMake);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();

        }
    });


    requestQueue.add(jsonArrayRequest);

}

这是我的 json 来自 URL1

的数据
[{"make":"Acura"},{"make":"Aston Martin"},{"make":"Audi"},{"make":"Bentley"},{"make":"BMW"},{"make":"Bugatti"},{"make":"Buick"},{"make":"Cadillac"},{"make":"Chevrolet"},{"make":"Chrysler"}]

尝试以下功能并告诉我。

private void parseJSONDataMAke() {
        try {
            JSONArray dataMakeArray = new JSONArray("[{\"make\":\"Acura\"},{\"make\":\"Aston Martin\"},{\"make\":\"Audi\"},{\"make\":\"Bentley\"},{\"make\":\"BMW\"},{\"make\":\"Bugatti\"},{\"make\":\"Buick\"},{\"make\":\"Cadillac\"},{\"make\":\"Chevrolet\"},{\"make\":\"Chrysler\"}]");

            ArrayList<String> stringArrayList = new ArrayList<>();

            for (int i = 0; i < dataMakeArray.length(); i++) {
                JSONObject jsonObject = dataMakeArray.getJSONObject(i);
                stringArrayList.add(jsonObject.getString("make"));
            }

            //Please set "stringArrayList" array into spinner

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

您的请求是异步的,因此您需要在收到这样的响应时通知您的 Spinner 适配器。

String URL1 = http://carmakemodeldb.com/vehicle/makes/2011 //this is here for you to see the link
public void loadSpinnerDataMake()
{
    makesName = new ArrayList<String>();

    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(URL1, new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
        try {
            makesName.clear(); //To avoid duplication of data
            for (int x = 0; x < response.length(); x++) {
                JSONObject obMake = response.getJSONObject(x);
                String nMake = obMake.getString("make");
                makesName.add(nMake);
            }

            adapterMake.notifyDataSetChanged();

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();

        }
    });


    requestQueue.add(jsonArrayRequest);

}

您没有通知适配器,这就是您没有得到结果的原因。

我解决了我的问题,谢谢所有帮助过的人,但我通过删除将数组列表添加到适配器并将其放置在 OnResponse 中的位置来解决问题

public void loadSpinnerDataMake()
{

    makesName = new ArrayList<String>();

    JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(URL1, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            try {
                JSONArray jsonArray = response;
                for (int x = 0; x < jsonArray.length(); x++) {
                    JSONObject obMake = jsonArray.getJSONObject(x);
                    String nMake = obMake.getString("make");
                    makesName.add(nMake);

                    adapterMake.clear();
                    adapterMake.addAll(makesName);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();

        }
    });

    RequestQueue requestQueue = Volley.newRequestQueue(getContext());

    requestQueue.add(jsonObjectRequest);

}