java - Android - 等待 Volley 响应返回

标签 java android wait android-volley

我需要执行 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/

相关文章:

java - 在Java中,调用set.iterator(),这个方法的内部流程是怎样的?

android - 在列表的上下文菜单中,字符串太长并被截断

Android WebView 使用 Android 操作系统版本设置自定义 UA

python - 如何让脚本等待按下按钮?

javascript - 如何创建 JavaScript 延迟函数

java - 如何为基本身份验证配置 HttpClient?

java - 在struts 2中的请求url路径中传递电子邮件时出错

java - 如何告诉 Hibernate 在 CRUD 操作中有条件地忽略列

android - 不同线程中的startActivty

java notify() 不会释放循环中等待对象的锁