在另一个班级/方法中访问齐射响应

时间:2015-05-07 16:02:03

标签: android android-volley

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

我需要做的下一步是使用数据进行进一步的请求。 第一个请求获得运动队列表。 然后,我想要求每个队员都有球员。

理想情况下,我想做的是发出第一个请求并返回JSONobject以用于另一个类。我不知道我会怎么做。

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

如果需要,我很乐意扩展这一点。

1 个答案:

答案 0 :(得分:0)

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

}