请问,凌空是否会自动将我的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参数现在是冗余的
试试这个,
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;
}
}
再看这个例子,
https://github.com/evancharlton/folly/
关于Itai Hanski的回答,这是一个实现的示例:
for(String key: params.keySet()) {
url += "&"+key+"="+params.get(key);
}
GET方法上未调用getParams(),因此似乎必须在发送请求之前将其添加到URL。
查看JavaDoc:
返回用于POST或PUT请求的参数映射。
可以抛出{@link AuthFailureError},因为提供这些值可能需要身份验证。
注意,您可以直接为自定义数据重写{@link#getBody()}。
@在身份验证失败时抛出AuthFailureError
我想为我所有的截击请求创建一个Auth头,我已经学会了如何创建一个覆盖请求类的getHeaders的头,但是我不能不时地在每个请求中更改它,我想使它成为一种静态的或全局的,我可以在任何地方更改它。以下是我到目前为止所做的尝试。 主要活动类 我尝试创建一个自定义类来扩展堆栈并重写执行请求。下面是名为GlobalHeaders的自定义堆栈类的代码 现在我不确定如何在我的主类中使用这个方法,在那里我添加
我试图使用Volley库向服务器发出一个JSONObject POST请求,该请求包含两个参数,一个对象(地址)和一个不同对象(租户)的列表。 当我尝试发出请求时,第一个参数(地址)在发送之前被截取格式化,服务器不接受该请求。 我的请求如下所示: 我的postPropertyJSONObject是这样创建的: convertAddressToJson()方法如下所示: 我尝试只是传递地址对象,但这
如何将自定义标头添加到HttpClient请求?我使用方法发布JSON。我需要添加的自定义标题是 这是我到目前为止所做的:
我正在尝试使用JS SDK在Dropbox上上传一个文件。下面是我试图调用函数的html代码: 这是定义函数的文件 但是,由于我不知道的原因,我的函数不能被调用。我得到错误“referenceerror:Dropupload is not defined”,我不知道这是否与问题有关,但我得到另一个错误:“syntaxerror:import declarations may only at top
我对Symfony和API平台很陌生。我正在尝试创建一个自定义资源/操作,该资源/操作接收请求的正文,根据值从数据库中获取数据,然后将实体集合返回给客户端。 示例:具有以下正文的 请求: 根据这些属性,我想查询数据,进行计算,然后返回数据。 我试图弄清楚如何使这个API平台的方式。我已经在谷歌上搜索并在留档中寻找了几个小时,但我找不到实现这一目标的方法。 我尝试使用和如下所示的控制器查询数据: 但
问题内容: 我想知道是否可以通过添加自定义信息来配置所有$ http请求标头。像config这样的东西: 但是对于所有$ http呼叫,我将使用不同的服务。我敢肯定有一个解决方案:D。谢谢 问题答案: 您可以创建一个拦截器来扩展标题: