排球请求(请求代码丢失)

时间:2015-06-12 12:21:43

标签: android android-volley

我在比较Volley Libs(我有的那个和最新的一个here

下面是用于实例化Request(Request.java类)

的内容

//旧代码

public Request(int method, String url, Response.ErrorListener listener,int requestCode) {
    mMethod = method;
    mUrl = url;
    mErrorListener = listener;
    mRequestCode = requestCode;
    setRetryPolicy(new DefaultRetryPolicy());

    mDefaultTrafficStatsTag = TextUtils.isEmpty(url) ? 0: Uri.parse(url).getHost().hashCode();
}

//当前代码

public Request(int method, String url, Response.ErrorListener listener) {
    mMethod = method;
    mUrl = url;
    mIdentifier = createIdentifier(method, url);
    mErrorListener = listener;
    setRetryPolicy(new DefaultRetryPolicy());

    mDefaultTrafficStatsTag = findDefaultTrafficStatsTag(url);
}

令我惊讶的是我一直非常突出地使用的东西。新用的 requestCode 变量用于识别我的响应或错误属于哪个请求。

我们推出了一个新的变量 mIdentifier ,我认为它可能是替代品,但找不到任何相关内容。

此外,我发现在Request对象上使用了setTag()方法,但这仅用于取消请求here

关于如何实现相同的requestCode事件或解决方法以在新代码中获得相同功能的任何建议或帮助都会很棒。

感谢。 :)

示例:以下是处理响应和错误回调的方式。缺少旧代码中的类型参数。

//旧代码

/** Callback interface for delivering parsed responses. */
public interface Listener<T> {
    /** Called when a response is received. */
    public void onResponse(T response,int type);

    /**
     * On response headers.
     *
     * @param headers the headers
     */
    public void onResponseHeaders(Map<String, String> headers,int type);
}

/** Callback interface for delivering error responses. */
public interface ErrorListener {
    /**
     * Callback method that an error has been occurred with the
     * provided error code and optional user-readable message.
     */
    public void onErrorResponse(VolleyError error,int type);
}

//当前代码

/** Callback interface for delivering parsed responses. */
public interface Listener<T> {
    /** Called when a response is received. */
    public void onResponse(T response);
}

/** Callback interface for delivering error responses. */
public interface ErrorListener {
    /**
     * Callback method that an error has been occurred with the
     * provided error code and optional user-readable message.
     */
    public void onErrorResponse(VolleyError error);
}

编辑(我想在新代码中实现以下内容,而不是每次创建请求时都写入响应):

@Override
public void onResponse(Object response, int type) {     

    if (type == NetworkController.REQ_CODE_UPDATE_USER) {
        //Update user
    }else if(type == NetworkController.REQ_CODE_DELETE_USER){
        //Delete User
    }
}

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望为您创建的所有请求维护一个响应侦听器。然后,您可以实现如下所示的自定义侦听器,并为每个请求存储reqcode,并根据reqcode处理响应。

class MyResponseListener implements Response.Listener<String> {
            int reqCode;
            public MyResponseListener(int reqcode){
                reqCode = reqcode;
            }
            @Override
            public void onResponse(String response) {
                if(reqCode  == 1){
                    Log.v("myapp","inside req code 1");
                    tv1.setText("hello world");
                }else if(reqCode == 2){
                    Log.v("myapp","inside req code 2");
                    tv2.setText("hello world2");
                }
            }
        }

如下创建请求。

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                    new MyResponseListener(1), new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //mTextView.setText("That didn't work!");
                }
            });

            StringRequest stringRequest2 = new StringRequest(Request.Method.GET, url,
                    new MyResponseListener(2), new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //mTextView.setText("That didn't work!");
                }
            });

我希望这就是你所需要的。