我目前正在使用android-async-http库发送帖子/获取请求。我以前没有任何问题,但现在我意识到,如果我发送没有图像数据的请求,它会给我超时错误。 (如果我通过放置图像数据发送完全相同的请求也没有错误。)
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);
这是什么原因? 提前谢谢。
答案 0 :(得分:1)
在比较请求和响应后,我发现案例是内容类型。对于图像,它发布了多部分,没有其他东西。
所以我进入了库中的RequestParams类,并进行了这些更改。 现在工作正常。为了进一步的麻烦,我发布了我所做的更改。
我放了一个标志来确定这个请求应该作为multipart发布:
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;
}