我目前正在使用android-async-http库来发送post/get请求。我以前没有任何问题,但现在我意识到如果我在没有图像数据的情况下发送此请求,它会给我超时错误。(如果我通过放置图像数据发送完全相同的请求,则没有错误。
RequestParams params = new RequestParams();
params.add("mail", mail.getText().toString());
params.add("password", pass.getText().toString());
try {
if (!TextUtils.isEmpty(imagePath))
params.put("image", new File(imagePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(60000);
client.post("some_url", params, myResponseHandler);
这是什么原因呢?提前谢谢。
在比较请求和响应后,我发现该案例是内容类型。有了图像,它发布了多部分,没有它,它就发布了其他东西。
所以我进入了库中的 RequestParams 类,并进行了这些更改。现在它工作正常。对于进一步的麻烦,我正在发布我所做的更改。
我放了一个标志来确定这个请求是否应该作为多部分发布:
private boolean shouldUseMultiPart = false;
我创建了一个构造函数来设置此参数:
public RequestParams(boolean shouldUseMultiPart) {
this.shouldUseMultiPart = shouldUseMultiPart;
init();
}
然后在getEntity()方法上,我应用了这些行:
/**
* Returns an HttpEntity containing all request parameters
*/
public HttpEntity getEntity() {
HttpEntity entity = null;
if (!fileParams.isEmpty()) {
...
} else {
if (shouldUseMultiPart) {
SimpleMultipartEntity multipartEntity = new SimpleMultipartEntity();
// Add string params
for (ConcurrentHashMap.Entry<String, String> entry : urlParams
.entrySet()) {
multipartEntity.addPart(entry.getKey(), entry.getValue());
}
// Add dupe params
for (ConcurrentHashMap.Entry<String, ArrayList<String>> entry : urlParamsWithArray
.entrySet()) {
ArrayList<String> values = entry.getValue();
for (String value : values) {
multipartEntity.addPart(entry.getKey(), value);
}
}
entity = multipartEntity;
} else {
try {
entity = new UrlEncodedFormEntity(getParamsList(), ENCODING);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
return entity;
}