java - 如何在android retrofit中上传文件时显示进度条

标签 java android http-post retrofit retrofit2

我正在使用改造开发一个 Android 应用程序。我想使用参数将任何类型的文件上传到我的服务器。例如在我的应用程序中有文本字段,如电子邮件和文件上传字段。当我输入字段并单击提交按钮时。它显示上传文件和发送文件和数据到服务器的百分比。当上传过程进行时,它想要显示已完成文件的百分比。怎么可能? 有没有引用网站或教程? 请帮帮我好吗?

最佳答案

创建这个界面

public interface ProgressListener {
                void transferred(long num);
            }

还有这个类

    public class CountingTypedFile extends TypedFile {

        private static final int BUFFER_SIZE = 4096;

        private final ProgressListener listener;

        public CountingTypedFile(String mimeType, File file, ProgressListener listener) {
            super(mimeType, file);
            this.listener = listener;
        }

        @Override
        public void writeTo(OutputStream out) throws IOException {

            byte[] buffer = new byte[BUFFER_SIZE];
            FileInputStream in = new FileInputStream(super.file());
            long total = 0;

            try {

                int read;
                while ((read = in.read(buffer)) != -1) {

                    total += read;
                    out.write(buffer, 0, read);

                    try{
                        if (this.listener != null)
                            this.listener.transferred(total);
                    }catch (Exception e){

                    }

                }
            } finally {
                in.close();
            }
        }
    }

定义这个方法

@POST("/{path}")
    public JsonObject makeRequestForAttachmentsUpload(@Path(value = "path", encode = false) String path, @Body MultipartTypedOutput multipartTypedOutput);

然后像这样调用上传方法

    RestClient restClient = new RestClient();
    ApiService apiService = restClient.getApiService();

MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput();
    // add and string parameters            
    for (String key : requestParams.keySet()) {
                    multipartTypedOutput.addPart(key, new TypedString(requestParams.get(key)));
                }

    // add attchments
                multipartTypedOutput.addPart(attachmentName, new CountingTypedFile(attachmentType, new File(attachmentPath), listener));
apiService.makeRequestForAttachmentsUpload(requestName, multipartTypedOutput);

并通过定义此监听器来监听进度

listener = new DPAPIService.ProgressListener() {
                @Override
                public void transferred(long num) {
                    publishProgress(((num / (float) fileSize)));
                }
        };

关于java - 如何在android retrofit中上传文件时显示进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40109830/

相关文章:

java - 在 spring security 中禁用浏览器身份验证对话框

android - MapFragment 和 Camera 似乎在同一个 Activity 中相互干扰

c# - Web Api - 具有复杂类型的 IEnumerable,因为参数为空

javascript - 如何在 AngularJS 中不使用 jquery 的情况下在页面加载时提交表单?

java - Android-几天后运行后出现代码错误

java - 如何在 Scala 或 Java 中读取具有混合编码的文本文件?

java - 有没有办法创建一个与父窗口具有相同属性的子窗口?

java - 旋转 Canvas 和绘制位图性能

java - 从服务器更新java代码

android - 将图像上传到android中的服务器?