【问题标题】:sotimeout not working in a multipart http post on android 2.1sotimeout 在 android 2.1 上的多部分 http 帖子中不起作用
【发布时间】:2011-08-07 18:17:03
【问题描述】:

我正在使用 android sdk 附带的 apache httpclient 使用 multipart 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);
}

【问题讨论】:

    标签: android


    【解决方案1】:

    试试这个:

    假设你有一个 httpClient 对象,它是 AndroidHttpClient 或 DefaultHttpClient 的一个实例

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

    你得到的httpParams是一个引用对象,所以它执行setIntParameter将解决这个问题

    除非你真的对自定义超时有特殊要求,否则更喜欢使用 AndroidHttpClient,它非常有用,可以解决我们的大部分问题 :) 祝你好运

    【讨论】:

      【解决方案2】:

      我认为你应该使用

      HttpParams lHttpParams = new  BasicHttpParams();
      HttpConnectionParams.setConnectionTimeout(lHttpParams, 3000);
      HttpConnectionParams.setSoTimeout(lHttpParams, 3000);
      

      最好的问候,
      ~阿努普

      【讨论】:

      • 你有没有试过这个......我已经尝试了所有可能的组合,似乎没有任何东西可以正确设置 sotimeout。当设备没有互联网连接时,它永远不会启动。 :(
      • 是的,你给的东西很好用......实际上我正在检查的设备是一个破解的设备,它强制安装了 2.2......可能是因为当我检查其他设备时它像魅力一样工作..thanx
      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2011-01-25
      • 2018-01-25
      相关资源
      最近更新 更多