Volley не вызывает getParams для моего пользовательского запроса?
Пожалуйста, 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 теперь избыточен
3 ответа
getParams()
не вызывается в методе GET, поэтому вам, вероятно, придется добавить его к URL-адресу перед отправкой запроса.
Проверьте JavaDoc:
Возвращает карту параметров, которые будут использоваться для запроса POST или PUT.
Может выдать {@link AuthFailureError}, поскольку для предоставления этих значений может потребоваться аутентификация.
Обратите внимание, что вы можете напрямую переопределить {@link #getBody()} для пользовательских данных.
@throws AuthFailureError в случае сбоя аутентификации
Что касается ответа Itai Hanski, это один пример для реализации этого:
for(String key: params.keySet()) {
url += "&"+key+"="+params.get(key);
}
Попробуй это,
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;
}
}
Смотрите этот пример также,