我需要执行 Volley 请求并等待响应解析并返回它,但不知道如何实现这一点。有人可以帮忙吗?
我现在拥有的是这样的:
public String getLink() {
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
shortenURL = response.getString("url");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
queue.add(jsObjRequest);
return shortenURL;
}
最佳答案
可重用的工厂方法设计模式解决方案:
要从另一个方法返回或获取 Volley 响应,您需要编写一个回调功能,使用接口(interface)很容易
这个简单的解决方案取 self 为 Android 应用程序开发的 MVC 架构,具有完整的可重用性和关注点分离概念。
假设 JSONObject 是来自服务器的响应
步骤 1)
创建一个接口(interface) ServerCallback
package xx.xx.xx.utils;
import org.json.JSONObject;
public interface ServerCallback{
void onSuccess(JSONObject result);
}
第 2 步)假设您的 Volley 服务器请求 方法位于 Controller 或任何其他共享的“上下文”类中,请在您的任何 Activity 中执行此操作
Controller controller = new Controller();
controller.youFunctionForVolleyRequest(email, password, this, loginUrl, new ServerCallback() {
@Override
public void onSuccess(JSONObject response) {
// do stuff here
}
}
);
3) 在您的 Controller 类中,调用 inResponse() 中的 ServerCallback 函数,该函数将仅在服务器任务完成的响应时在 Activity 中执行您的代码!
public void youFunctionForVolleyRequest(final String email , final String password ,final Context context , final String URL, final ServerCallback callback)
{
HashMap<String, String> params = new HashMap<String, String>();
params.put("email", email);
params.put("password", password);
Log.e("sending json",params.toString());
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
URL, new JSONObject(params), new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
callback.onSuccess(response); // call call back function here
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//VolleyLog.d("Volley error json object ", "Error: " + error.getMessage());
}
}){
@Override
public String getBodyContentType()
{
return "application/json";
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq);
}
关于java - Android - 等待 Volley 响应返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833977/