Android Volley没有为我的自定义请求调用getParams?

Android Volley没有为我的自定义请求调用getParams?,android,get,android-volley,Android,Get,Android Volley,请问,Volley会自动将我的GET参数添加到URL吗?对我来说,它不起作用,所以在查找源代码时,我找不到任何对getParams方法的调用。。 那么我应该自己构建URL吗?这一点都没有问题,我只是想,如果有像getParams这样的方法,它可以为我做到这一点:) 更新:下面是我的代码 public class BundleRequest extends com.android.volley.Request<Bundle>{ private String token;

请问,Volley会自动将我的GET参数添加到URL吗?对我来说,它不起作用,所以在查找源代码时,我找不到任何对getParams方法的调用。。 那么我应该自己构建URL吗?这一点都没有问题,我只是想,如果有像getParams这样的方法,它可以为我做到这一点:)

更新:下面是我的代码

public class BundleRequest extends com.android.volley.Request<Bundle>{

    private String token;
    private OnAuthTokenValidatorResponseListener mListener;
    private final Map<String, String> mParams =  new HashMap<String, String>();;


    public BundleRequest(int method, String url,  Response.ErrorListener listener) {
        super(method, url, listener);
    }

    public BundleRequest(int method, String url,OnAuthTokenValidatorResponseListener providedListener,  Response.ErrorListener listener, String token) {
        super(method, url, listener);
        this.token = token;
        mListener = providedListener;
        mParams.put(AuthenticatorConfig.TOKEN_VALIDATION_PARAMNAME, token);

    }

    @Override
    public Map<String, String> getParams() throws AuthFailureError {
        return mParams;
    }




    @Override
    protected Response<Bundle> parseNetworkResponse(NetworkResponse httpResponse) {
        switch (httpResponse.statusCode) {
            case AuthTokenValidator.TOKEN_VALID_RESPONSE_CODE:
                //token is ok
                JSONObject response;
                try {
                        response = new JSONObject(new String(httpResponse.data, HttpHeaderParser.parseCharset(httpResponse.headers)));
                        Bundle userDataResponse = new Bundle();
                        userDataResponse.putInt("responseCode", httpResponse.statusCode);
                        userDataResponse.putString("username", response.getString("user_id"));
                        userDataResponse.putString("email", response.getString("user_email"));
                        userDataResponse.putString("expiresIn", response.getString("expires_in"));
                        userDataResponse.putString("scope", response.getJSONArray("scope").getString(0));
                        userDataResponse.putString("token", token);
                    return Response.success(userDataResponse, HttpHeaderParser.parseCacheHeaders(httpResponse));
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    return Response.error(new VolleyError("Unsupported encoding"));


                } catch (JSONException e) {
                    e.printStackTrace();
                    return Response.error(new VolleyError("Problem while parsing JSON"));
                }




            case AuthTokenValidator.TOKEN_INVALID_RESPONSE_CODE:
                //token is not valid
                mListener.onValidatorResponse(httpResponse.statusCode);
                try {
                    mListener.onValidatorResponse(parseOnErrorResponse(new String(httpResponse.data, HttpHeaderParser.parseCharset(httpResponse.headers))));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

            default:
                return Response.error(new VolleyError("Error status code:" + httpResponse.statusCode));

        }
    }

    protected int parseOnErrorResponse(String responseBody) {
        try {
            JSONObject response = new JSONObject(responseBody);
            String moreInfo = response.getString("more_info");
            if (moreInfo.equals("Token was not recognised")) {
                return AuthTokenValidator.TOKEN_WAS_NOT_RECOGNISED;
            } else if (moreInfo.equals("Token has expired")) {
                return AuthTokenValidator.TOKEN_HAS_EXPIRED;
            } else if (moreInfo.equals("Client doesn't exist anymore")) {
                return AuthTokenValidator.CLIENT_DOES_NOT_EXIST_ANYMORE;
            } else if (moreInfo.equals("Client is locked")) {
                return AuthTokenValidator.CLIENT_IS_LOCKED;
            } else {
                return AuthTokenValidator.UNKNOWN_ERROR;
            }

        } catch (JSONException e) {
            e.printStackTrace();
            return AuthTokenValidator.UNKNOWN_ERROR;
        }

    }

    @Override
    protected void deliverResponse(Bundle response) {
        mListener.onGetUserDataResponse(response);
    }
}
公共类BundleRequest扩展com.android.volley.Request{
私有字符串令牌;
私人OnAuthTokenValidator ResponseListener mListener;
私有最终映射mParams=newhashmap();;
公共BundleRequest(int方法、字符串url、Response.ErrorListener侦听器){
super(方法、url、侦听器);
}
公共BundleRequest(int方法、字符串url、OnAuthTokenValidatorResponseListener提供的侦听器、Response.ErrorListener侦听器、字符串令牌){
super(方法、url、侦听器);
this.token=token;
mListener=提供的侦听器;
mParams.put(AuthenticatorConfig.TOKEN\u VALIDATION\u PARAMNAME,TOKEN);
}
@凌驾
公共映射getParams()引发AuthFailureError{
返回内存;
}
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse httpResponse){
开关(httpResponse.statusCode){
案例AuthTokenValidator.TOKEN\有效\响应\代码:
//代币没问题
JSONObject响应;
试一试{
response=newjsonobject(新字符串(httpResponse.data,HttpHeaderParser.parseCharset(httpResponse.headers));
Bundle userDataResponse=新Bundle();
userDataResponse.putInt(“responseCode”,httpResponse.statusCode);
userDataResponse.putString(“用户名”,response.getString(“用户id”);
userDataResponse.putString(“email”,response.getString(“user_email”);
userDataResponse.putString(“expiresIn”,response.getString(“expires_in”);
userDataResponse.putString(“范围”,response.getJSONArray(“范围”).getString(0));
putString(“token”,token);
返回Response.success(userDataResponse,HttpHeaderParser.parseCacheHeaders(httpResponse));
}捕获(不支持的编码异常e){
e、 printStackTrace();
返回Response.error(新截击错误(“不支持的编码”);
}捕获(JSONException e){
e、 printStackTrace();
返回Response.error(新的截击错误(“解析JSON时出现问题”);
}
案例AuthTokenValidator.TOKEN\无效\响应\代码:
//令牌无效
mListener.onValidatorResponse(httpResponse.statusCode);
试一试{
mListener.onValidatorResponse(parseOnErrorResponse(新字符串(httpResponse.data,HttpHeaderParser.parseCharset(httpResponse.headers)));
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
违约:
返回Response.error(新的截击错误(“错误状态代码:”+httpResponse.statusCode));
}
}
受保护的int-parseOnErrorResponse(字符串响应库){
试一试{
JSONObject response=新的JSONObject(ResponseBy);
String moreInfo=response.getString(“more_info”);
如果(moreInfo.equals(“未识别令牌”)){
return AuthTokenValidator.TOKEN未被识别;
}否则如果(moreInfo.equals(“令牌已过期”)){
return AuthTokenValidator.TOKEN\u已过期;
}else if(moreInfo.equals(“客户端不再存在”)){
return AuthTokenValidator.CLIENT不再存在;
}else if(moreInfo.equals(“客户端已锁定”)){
return AuthTokenValidator.CLIENT_已锁定;
}否则{
返回AuthTokenValidator.UNKNOWN\u错误;
}
}捕获(JSONException e){
e、 printStackTrace();
返回AuthTokenValidator.UNKNOWN\u错误;
}
}
@凌驾
受保护的无效交付响应(捆绑响应){
mListener.onGetUserDataResponse(response);
}
}
实际上,params参数现在是冗余的

试试这个

public class LoginRequest extends Request<String> {

    // ... other methods go here

    private Map<String, String> mParams;

    public LoginRequest(String param1, String param2, Listener<String> listener, ErrorListener errorListener) {
        super(Method.POST, "http://test.url", errorListener);
        mListener = listener;
        mParams.put("paramOne", param1);
        mParams.put("paramTwo", param2);

    }

    @Override
    public Map<String, String> getParams() {
        return mParams;
    }
}
公共类登录请求扩展请求{
//…其他方法也在这里
私人地图;
公共登录请求(字符串参数1、字符串参数2、侦听器侦听器、ErrorListener ErrorListener){
超级(Method.POST,“http://test.url“,errorListener);
mListener=监听器;
mParams.put(“paramOne”,param1);
mParams.put(“参数2”,参数2);
}
@凌驾
公共映射getParams(){
返回内存;
}
}
再看这个例子

getParams()
未在GET方法上调用,因此您似乎必须在发送请求之前将其添加到URL中

查看JavaDoc:

返回用于POST或PUT请求的参数映射

可以抛出{@link AuthFailureError},因为可能需要身份验证 提供这些值

请注意,您可以直接重写{@link#getBody()}以进行自定义 数据

@在身份验证失败的情况下抛出AuthFailureError

关于答案,这是一个实施的示例:

 for(String key: params.keySet()) {
   url += "&"+key+"="+params.get(key);
 }

嗯..事实上我没有..我试图在getParams()方法中设置断点,但它从未中断过:/我还查看了随Volley提供的HurlStack和HttpClientStack,没有调用该方法..有很多关于头等的内容,但是除了HttpClientStack中的两行设置了一些超时之外,没有调用getParams()…是否有任何特定的原因