Return JSON 从自定义 VolleyCallback 接口到调用方法

Return JSON from custom VolleyCallback interface to calling method

我有下面的方法:它所做的是从另一个 activity 和 return 调用方法 userSignIn 一个 JsonObject,因为我的 volley 实现是异步调用的,所以我已经实现了回调接口从 OnResponce 方法获取结果。然而,我面临的困难是 return 将 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;
}

我也对 return 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;

        }


    });
}

我如何return 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);
}