在另一个 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);
}
我正开始我的 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);
}