在另一个 class/method 中访问截击响应

Accessing volley response in another class/method

我正开始我的 Android 开发之旅,所以可能做错了。我正在尝试使用 Volley 获取一组数据并显示它没问题。

下一步我需要做的是使用数据提出进一步的请求。 第一个请求获取运动队列表。 然后我想为每个团队提出请求。

理想情况下,我想做的是发出第一个请求,然后 return JSONobject 与另一个 class 一起使用。我不知道该怎么做。

teamData.getTeams(
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

               //i want to get this out somehow
               JSONObject thing = response;

}//end on response
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //Show error or whatever...
                }
            });

如果需要,我很乐意对此进行扩展。

Volley 正在对请求进行排队,以便在旧请求返回成功或错误后触发请求。 所以你可以在旧请求成功的时候入队一个新的请求。

示例:在您对团队请求的响应中,您添加了一个新请求,就像您所做的那样 JSONObject thing = response;

这是我的一个例子导入多个项目,然后导入每个项目信息:

  public void importProjects() {
    Response.Listener<JSONArray> jsonArrayResponseListener;
    String url = Globals.getApiBaseUrl() + GET_PROJECTS_URL;
    jsonArrayResponseListener = new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            try {
                ArrayList<Project> projects = MyJsonParser.getInstance().parseProjects(response);

                if (projects.size() > 0) {
                    for (Project p : projects) {
                        importProject(p); //####### HERE IS THE KEY :: this methode is the same of this one. It calls other volley request.#######//
                    }
                }
            } catch (Exception e) {
                Log.e("SyncRngine", "THIS IS AN ERROR");
                e.printStackTrace();
            }
        }
    };
    Response.ErrorListener responseError;
    responseError = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    };

    url = formatUrl(url, params);
    Log.i("URL IMPORT PROJECTS", url);
    MyVolleyJsonArrayRequest customRequest = new MyVolleyJsonArrayRequest(Request.Method.GET, url, jsonArrayResponseListener, responseError);
    MyVolley.getInstance(activity.getApplicationContext()).addToRequestQueue(customRequest);

}

现在 importProject(Project p) 的定义:

 public void importProject(final Project project) {
    String url = Globals.getApiBaseUrl() + GET_PROJECT_URL;

    Response.Listener<JSONArray> jsonArrayResponseListener;
    jsonArrayResponseListener = new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            try {
                useProjectInfos(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    Response.ErrorListener responseError;
    responseError = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    };
    url = url + "/" + project.getProjectID();
    url = formatUrl(url, params);
    MyVolleyJsonArrayRequest customRequest = new MyVolleyJsonArrayRequest(Request.Method.GET, url, jsonArrayResponseListener, responseError);
    MyVolley.getInstance(activity.getApplicationContext()).addToRequestQueue(customRequest);

}