小弟刚学android不是太久,也不太系统,有很多东西还是不清楚的,前几天弄了个文件上传就很纠结…………想加一个进度条,但是因为文件大,不能用http协议上传,就想到了很简洁的post上传,现在倒是传上去了,但是因为Entity封装的问题,没有办法得到实时进度,想请各位大虾帮忙,我感激不尽以下是代码: protected void uploadPic(String filepath) {
try {
File file = new File(filepath); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.show();
HttpPost request = new HttpPost("http://192.168.1.101:8086/MyService/myfile");
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpClient hc = new DefaultHttpClient(params);
HttpResponse hrs = null;
InputStreamEntity instreamEntity = new InputStreamEntity(new FileInputStream(file), file.length());
request.setEntity(instreamEntity);
hrs = hc.execute(request);
System.out.println(instreamEntity.getContentLength());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在此先感谢各位了

解决方案 »

  1.   

    用HttpUrlConection吧 或者用Socket 都不是很难 封装太厉害就这样 很多过程无法自己控制
      

  2.   

    呃……因为特殊要求没办法用Socket,然后HttpUrlConnection那个试过了因为要用流存到缓存经常内存溢出……这个貌似是现在唯一符合要求的一个方法了
      

  3.   

    你可以使用AsyncTask实现上传后台与UI的展示进度特别好使,你可以搜搜AsyncTask的使用方法
      

  4.   

    感谢指点,看了一些例子自己也弄了一两个,只是还有一个疑问,用AsyncTask能不能不通过I/O流操作啊?这样操作I/O流貌似也会出现Out of Memory啊…………