android - Volley Request Callback 传递错误的回调响应

标签 android json callback request android-volley

我在 volley 请求上添加了一个回调,并且我有两个请求从 2 个不同的 Activity 开始。当我执行第一个请求时,第二个请求返回第一个请求的响应..

这是我的请求和回调:

public static void RequestJsonToServer(Context ctx, final JSONObject params, final VolleyCallback callback){

    MySingleVolley.getInstance(ctx).
            getRequestQueue();

    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,ctx.getString(R.string.defaultServerRequestUrl),params,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    callback.onSuccess(response);
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("REQUEST_JSON_TO_SERVER", "Error: " + error);
                }
            }){
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        HashMap<String, String> headers = new HashMap<>();
                        headers.put("Content-Type", "application/json");
                        return headers;
                    }
            };

    MySingleVolley.getInstance(ctx).addToRequestQueue(jsObjRequest);

}

public interface VolleyCallback{
    void onSuccess(JSONObject string);
}

这是两个起始请求之一:

Global.RequestJsonToServer(getActivity(), jsonObject, new Global.VolleyCallback() {
        @Override
        public void onSuccess(JSONObject result) {
            Toast.makeText(getActivity(),result.toString(), Toast.LENGTH_LONG).show();
        }
    });

我希望有人能帮助我

谢谢

编辑: 我是这样改的

Global.RequestJsonToServer(getApplicationContext(), jsonObject, new Global.VolleyCallback() {

        @Override
        public void onSuccess(JSONObject result) {
            Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onSuccessCustom(JSONObject string) {

        }
    }, true);

另一个是 false.. 但可能是错误的使用方式..我想有一个回调并重用它,而不是在两个回调之间切换

我的解决方案

我找到了自己的解决方案,问题不在回调中,而是在 volley 请求中。每个请求的响应都被缓存了,我不知道为什么,它总是会返回错误的响应。

我刚刚在将请求添加到队列之前添加了这个:

jsObjRequest.setShouldCache(false);

最佳答案

发生这种情况是因为您的回调方法很常见 [onSuccess(...)] 为什么不编写 2 个回调并根据条件使用所需的回调。 要实现它,请在您的界面中编写 2 个方法并传递某种标志以选择回调。
将您的界面更改为此。

public interface VolleyCallback{
    void onSuccess(JSONObject string);
    void customOnSuccess(JSONObject string);
}

还有你的方法

public static void RequestJsonToServer(boolean flag,Context ctx, final JSONObject params, final VolleyCallback callback){

    MySingleVolley.getInstance(ctx).
            getRequestQueue();

    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,ctx.getString(R.string.defaultServerRequestUrl),params,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    if(flag){
                    callback.onSuccess(response);
                    }else{
                    callback.CustomOnSuccess(response);
                   }
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("REQUEST_JSON_TO_SERVER", "Error: " + error);
                }
            }){
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        HashMap<String, String> headers = new HashMap<>();
                        headers.put("Content-Type", "application/json");
                        return headers;
                    }
            };

    MySingleVolley.getInstance(ctx).addToRequestQueue(jsObjRequest);

}

是的,它可重复使用 onSucces,当你只有一个回调时,当你有多个回调时使用两者。

关于android - Volley Request Callback 传递错误的回调响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947363/

相关文章:

java - 解析自定义推送声音

java - 我想从 firebase 存储中检索视频

javascript - JSON 获取地理位置未在 HTML 中返回值

objective-c - 显示来自 json 的图像

php - 支付宝支付回调

Android 强制关闭 java.lang.NullPointerException

java - 如何在下一个 Activity 中显示响应

iphone - 判断MySpace是否登录成功

c# - 如何与多个 APM BeginXXX 调用共享 AsyncCallback?

Android Studio 签名 APK 应用未安装