繁体   English   中英

(Android)是否可以从Socket Outputstream.write()获取上传进度?

[英](Android) Get upload progress from Socket Outputstream.write()?

我正在制作一个Android应用程序,以将文件从设备传输到计算机上的Java应用程序。 从某种意义上说,它可以将文件发送到计算机,但是在发送时具有ProgressDialog 该对话框不是要监视从SD卡读取的进度,而是要监视上传到服务器的进度。 到目前为止,我的搜索仅来自从SD卡或网页中读取的内容。

要上传,我使用的是一个简单的OutputStream ,它是用socket.getOutputStream();创建的socket.getOutputStream(); 我的代码如下:

protected void onProgressUpdate(Integer... values) {
    mProgressDialog.setIndeterminate(false);
    mProgressDialog.setProgress(progress);
}

@Override
protected String doInBackground(String[] params) {
    String IP = params[1];
    File myFile = new File(params[0]);
    int count;
    try {
        long total = 0;
        Socket socket = new Socket(IP, 25000);
        byte[] buffer = new byte[(int) myFile.length()];
        FileInputStream fis = new FileInputStream(myFile);
        BufferedInputStream in = new BufferedInputStream(fis);
        OutputStream out = socket.getOutputStream(); // THIS IS MY OUTPUTSTREAM
        while((count = in.read(buffer, 0, buffer.length)) != -1) {
            total += count;
            progress = (int) (count);
            publishProgress();
            out.write(buffer, 0, buffer.length);
            Log.i("TOTAL", Long.toString(total));
            Log.i("Upload progress", "" + (int) ((total * 100) / buffer.length));
        }
        out.flush();
        out.close();
        in.close();
        socket.close();
    } catch(Exception ex) {
        ex.printStackTrace();
        Log.i("TAG", "Failed to send file");
    }
    return "test";
}

从我对文档和其他论坛的研究来看,OutputStream似乎没有返回任何东西的方法。 这很麻烦,因为我需要在上传中返回其当前状态。

截至目前,无论文件大小如何,进度对话框都会立即从0变为最大(实际花费的时间要长得多)。 我不知道是什么原因造成的,但这不是重点。

如何使用OutputStream监视文件的上传进度? 这可能吗?

提前致谢。

您的问题是您使用文件大小创建了缓冲区:

byte[] buffer = new byte[(int) myFile.length()];

因此您的循环仅经过1次,因为有足够的数据空间

while((count = in.read(buffer, 0, buffer.length)) != -1)

您需要更改以下内容:

byte[] buffer = new byte[256];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM