android - 如何在成功响应 Volley Android 中获取状态代码

标签 android request response status android-volley

请问使用Volley时如何获取状态码

我有以下代码:

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // Here I want to get status code
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    )

这可能吗?如果不是,为什么?

最佳答案

也许这个类而不是 StringResponse:

public class NetworkResponseRequest extends Request<NetworkResponse> {
private final Response.Listener<NetworkResponse> mListener;

public NetworkResponseRequest(int method, String url, Response.Listener<NetworkResponse> listener,
                     Response.ErrorListener errorListener) {
    super(method, url, errorListener);
    mListener = listener;
}

public NetworkResponseRequest(String url, Response.Listener<NetworkResponse> listener, Response.ErrorListener errorListener) {
    this(Method.GET, url, listener, errorListener);
}

@Override
protected void deliverResponse(NetworkResponse response) {
    mListener.onResponse(response);
}

@Override
protected Response<NetworkResponse> parseNetworkResponse(NetworkResponse response) {
    return Response.success(response, HttpHeaderParser.parseCacheHeaders(response));
}

public static String parseToString(NetworkResponse response) {
    String parsed;
    try {
        parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
    } catch (UnsupportedEncodingException e) {
        parsed = new String(response.data);
    }
    return parsed;
}
}

用法:

NetworkResponseRequest request = new NetworkResponseRequest(Request.Method.GET, "http://example.com/test.php",
            new Response.Listener<NetworkResponse>() {
                @Override
                public void onResponse(NetworkResponse response) {
                    // This is status code: response.statusCode
                    // This is string response: NetworkResponseRequest.parseToString(response)
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    );

使用我自己的实现而不是 StringRequest 并不好。你怎么看?

关于android - 如何在成功响应 Volley Android 中获取状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271686/

相关文章:

android - 向下或向上滚动时 Listview 崩溃

swift - 如何在 Swift4+ 中作为标准 POST 方法发送数组数组

ios - 了解handleWatchKitExtensionRequest

ruby-on-rails - "Nil location provided. Can' t build URI."在 rails 中执行 AJAX 请求时是什么意思?

request - 在 Cypress 中提交 POST 表单并导航到结果页面

java - 创建 JSONArray 时出现 NullPointerException

android.view.AbsSavedState$1 无法转换为 android.widget.CompoundButton$SavedState

http - 可恢复.js : HTTP response errors (deployed to heroku or nodejitsu)

Samsung Tab GT-P3100 中的 Android 下载管理器问题

python - Django - 使用外部脚本从 url 下载图像并将其插入 imageField