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

时间:2018-07-26 09:14:52

标签: java android json android-volley spinner

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

我正在用来自Spinner的{​​{1}}数据填充jsonURL数据是无名的,我正在尝试将数据放入{{1 }},因此我可以填充Json

每当我ArrayList出现Spinnerdebug后,我都会看到它跳过了onResponse()方法,请查看我的代码,看看我在做什么错

StringRequest

这是我来自JSONArrayRequest的{​​{1}}数据

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);

}

3 个答案:

答案 0 :(得分:0)

尝试以下功能,让我知道。

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();
        }
    }

答案 1 :(得分:0)

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

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);

}

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

答案 2 :(得分:0)

我解决了我的问题,谢谢所有帮助过我的人,但是我想出了办法,方法是删除将数组列表添加到适配器的位置并将其放置在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);

}