公司现在正做一个其他网站的android客户端,有点类似腾讯微博,利用官方提供的api接口进行开发,但现在的需求是实现上传照片时,及时更新进度条,SDK中无此功能,所以需要自己写。
    我的思路是利用HttpURLConnection建立连接,将图片转化为流,然后传输到服务器,但这样做无法监听到输出流的传输进度,到底要怎么做,才能监听到流的传输进度呢~请高手们帮帮忙,研究三天了,还没解决……泪流满面啊
    以下是主要代码:
con=(HttpURLConnection)url.openConnection();
 con.setDoInput(true);
 con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", contentType);
con.setRequestProperty("Authorization", "OAuth "+ token);
con.connect();
以上httpHeader,是官方API提供的格式,没有错误。(如果用严格的自定义表单格式,我也就不纠结进度问题了)
DataOutputStream dos =  new DataOutputStream(con.getOutputStream());
InputStream fStream = new FileInputStream(path);
byte[] buffer = new byte[1024];
int length = -1;        
while ((length = fStream.read(buffer)) != -1) {
        
    dos.write(buffer);
     
}
fStream.close();
dos.flush();
dos.close();
con.getResponseCode();
本以为在上面循环中,分批将文件信息读入流中就可以实现进度监听,但实践过后才发现,系统是将整个文件读入流后才传输出去的,也就是说循环结束后才发送数据……现在就是不知道如何在数据传输时监听传输数据……

解决方案 »

  1.   

    通过线程和Handler共同实现 如果你需要的话 我可以把代码给你发过去
      

  2.   

    谢谢哈,不用了。如何实现进度更新我知道,现在的问题是,无法获取文件上传的进度……请问一下,利用DataOutputStream将数据传输到服务器时,是否可以及时获取进度呢?
      

  3.   

    谢谢哈,不用了。如何实现进度更新我知道,现在的问题是,无法获取文件上传的进度……请问一下,利用DataOutputStream将数据传输到服务器时,是否可以及时获取进度呢?