gpt4 book ai didi

android - Volley 不会为我的自定义请求调用 getParams?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:37:45 26 4
gpt4 key购买 nike

请问,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);
}
}

实际上 params 参数现在是多余的

最佳答案

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

查看 JavaDoc:

Returns a Map of parameters to be used for a POST or PUT request.

Can throw {@link AuthFailureError} as authentication may be required to provide these values.

Note that you can directly override {@link #getBody()} for custom data.

@throws AuthFailureError in the event of auth failure

关于android - Volley 不会为我的自定义请求调用 getParams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com