在Volley onResponse回调方法

时间:2015-11-03 19:35:37

标签: android arraylist

我正面临一个非常奇怪的问题..我在Volley库的onResponse方法中填充了一个带有String值的arraylist ...在onResponse中记录arraylist的值显示arraylist不是空的...但当我这样做时在arraylist从方法中重新出现之前是空的......

private ArrayList<String> getFirmNamesToPopulateSpinner() {

        JsonArrayRequest jsonArrayFirmNamesRequest = new JsonArrayRequest(Request.Method.POST, AppConfig.URL_FIRMNAMES,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        for(int i=0; i<response.length(); i++){
                            try {
                                JSONObject firmObject = response.getJSONObject(i);
                                String firmName = firmObject.getString(AppConfig.TAG_FIRM_NAME);
                                firmNamesArrayList.add(firmName);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        Log.d(debugTag, "return inside onResponse" + firmNamesArrayList);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e(debugTag, "response error: " + error.getMessage());
                    }
                });
        Log.d(debugTag, "return before adding Request" + firmNamesArrayList);
        // Adding request to request queue
        VolleySingleton.getInstance().addToRequestQueue(jsonArrayFirmNamesRequest, AppConfig.TAG_FIRMNAMES_REQUEST);

        return firmNamesArrayList;
    }

任何人都可以解释为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

根据lordoku和搜索了一下..我发现了一个解决方案..我解决问题的方法是创建一个回调接口并在onResponse完成后执行接口的回调方法getFirmNamesOnSuccess() ...

interface FirmNamesRequestCallback

private interface FirmNamesRequestCallback{
    void getFirmNamesOnSuccess(JSONArray firmName);
}

在getFirmNamesToPopulateSpinner(最终的FirmNamesRequestCallback firmNamesRequestCallback)中,以接口作为参数调用 特别是在onResponse内部,执行接口的回调方法

 public void onResponse(JSONArray response) {
                    firmNamesRequestCallback.getFirmNamesOnSuccess(response);
                }

使用接口的新对象调用getFirmNamesToPopulateSpinner,并在回调方法的实现中调用,该方法仅在onResponse完成后执行,我填充arrayadapter ...

 getFirmNamesToPopulateSpinner(new FirmNamesRequestCallback() {
                @Override
                public void getFirmNamesOnSuccess(JSONArray firmName) {
                    //do some stuff here the JSONArray response
                }
            });