android - 从自定义 VolleyCallback 接口(interface)返回 JSON 到调用方法

标签 android json android-volley

我有下面的方法:它所做的是从另一个 Activity 调用方法 userSignIn 并返回一个 JsonObject,因为我的 volley 实现异步调用我已经实现了从 OnResponce 获取结果的回调接口(interface) 方法。然而,我面临的困难是将 JSONObject 返回给调用 Activity。

@Override
public JSONObject userSignIn(String user, String pass,String version, String authType, String URL) throws Exception {

    urlBuilder = new StringBuilder(URL);
    urlBuilder.append("?uname=" + user);
    urlBuilder.append("&passwd=" + pass);
    urlBuilder.append("&ver=" + version);

    URI=urlBuilder.toString();


     VolleyLoginExecute(new VolleyCallback() {
         @Override
         public JSONObject onSuccess(JSONObject result) {
             responce = result;
             return responce;

         }


     });


    return responce;
}
public interface VolleyCallback{
    JSONObject onSuccess(JSONObject result);

}

public JSONObject VolleyLoginExecute(final VolleyCallback callback) {

    JsonObjectRequest LoginReq = new JsonObjectRequest(Request.Method.GET,URI, null,new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {

            if (response != null) {
                callback.onSuccess(response);

            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {

        }
    })
    {
        @Override
        public Priority getPriority() {
            return priority;
        }
    };
    LoginReq.setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    Acme_Application.getInstance().addToRequestQueue(LoginReq, tag_login_req);

    return responce;
}

我也尝试过返回 JsonObject,但效果不佳

@Override
public JSONObject userSignIn(String user, String pass,String version, String authType, String URL) throws Exception {

    urlBuilder = new StringBuilder(URL);
    urlBuilder.append("?uname=" + user);
    urlBuilder.append("&passwd=" + pass);
    urlBuilder.append("&ver=" + version);

    URI=urlBuilder.toString();

    return VolleyLoginExecute(new VolleyCallback() {
        @Override
        public JSONObject onSuccess(JSONObject result) {
            responce = result;
            return responce;

        }


    });
}

如何将 JsonObject 成功返回给调用 Activity

最佳答案

@Override
public void userSignIn(final VolleyCallback volleyCallback,String user, String pass,String version, String authType, String URL) throws Exception {

    urlBuilder = new StringBuilder(URL);
    urlBuilder.append("?uname=" + user);
    urlBuilder.append("&passwd=" + pass);
    urlBuilder.append("&ver=" + version);

    URI=urlBuilder.toString();

     VolleyLoginExecute(new VolleyCallback() {
         @Override
         public void onSuccess(JSONObject result) {
           volleyCallback.onSuccess(result);
         }
     });
}  public interface VolleyCallback{
    void onSuccess(JSONObject result);
}      public void VolleyLoginExecute(final VolleyCallback callback) {
    JsonObjectRequest LoginReq = new JsonObjectRequest(Request.Method.GET,URI, null,new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            if (response != null) {
                callback.onSuccess(response);
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    })
    {
        @Override
        public Priority getPriority() {
            return priority;
        }
    };
    LoginReq.setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    Acme_Application.getInstance().addToRequestQueue(LoginReq, tag_login_req);
}

关于android - 从自定义 VolleyCallback 接口(interface)返回 JSON 到调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738660/

相关文章:

android - 如何更改 react-native webview 的 font-family (font-family.ttf from assets)

android - 为 testAndroid 设置与主应用不同的 minSdkVersion

ruby-on-rails - 覆盖设计 SessionsController 销毁

java - Android 从 http 请求获取 json 引发 IOException : Attempted read on closed stream

java - Volley 抽射。发送 JSONObject 作为参数

java - 仅在 Android 4.3 Jellybean 中使用 ping 验证互联网连接失败

java - 在 Android 游戏逻辑中解锁关卡

java - Recyclerview 内存不足错误(使用 Volley)

java - 有人可以帮助我吗?我怎么了 Volley 获取请求

android - 使用 android volley 获取 Instagram 访问 token