我正在使用android sdk附带的apache httpclient使用多部分http post在服务器上上载文件。问题是,当我关闭设备上的wifi连接,并且在设置sotimeout和connectiontimeout之后设备没有互联网访问和事件时,代码将无限期地挂在httpclient.execute()语句上,并且每次都会发生。
我的代码是:

HttpClient httpclient = new DefaultHttpClient();

HttpConnectionParams.setSoTimeout(httpclient.getParams(), 5000);
ConnManagerParams.setTimeout( httpclient.getParams(), 5000 );

HttpConnectionParams.setSocketBufferSize(httpclient.getParams(), 8192);

HttpPost("http://myurl");

File file = new File(fileAbsolutePath);
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file);
mpEntity.addPart("uploadedfile", cbFile);
httppost.setEntity(mpEntity);
if(!backupCancel)
{
    System.out.println("<<<<<<<<<<<<<<<<<<<<<<Actually transferring file>>>>>>>>>>>>>>>");
    HttpResponse response = httpclient.execute(httppost);
}

最佳答案

试试这个:
假设你有一个httpclient对象,它是androidhttpclient或defaulthttpclient的实例

HttpParams httpParams = httpClient.getParams();
httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, Timeout in milli seconds);

你得到的httpparams是一个引用对象,因此它执行setintparameter将修复这个问题
除非您对自定义超时有特殊要求,否则更喜欢使用androidhttpclient,它非常有用,可以解决我们的大多数问题:)祝您好运

07-24 09:18