Android 使用服务将文件上传到带进度条的服务器

2024-01-24

我已经使用 asynctask 实现了带有进度条的上传文件,但大文件或上传多个文件会挂起我的活动,现在我想做同样的事情,但使用服务而不是使用 asynctask。这是我的代码..

 private class UploadFileToServer extends AsyncTask<Void, Integer, String> {

        @Override
        protected void onPreExecute() {
            // setting progress bar to zero
            mBuilder.setProgress(100, 0, false);
            mNotifyManager.notify(0, mBuilder.build());
            super.onPreExecute();
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
            mBuilder.setProgress(100,
                    Integer.parseInt(String.valueOf(progress[0])), false);
            mNotifyManager.notify(0, mBuilder.build());
        }

        @Override
        protected String doInBackground(Void... params) {
            return uploadFile();
        }

        private String uploadFile() {
            String responseString = null;

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(***);

            try {
                AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                        new AndroidMultiPartEntity.ProgressListener() {
                            public void transferred(long num) {
                                publishProgress((int) ((num / (float) totalSize) * 100));
                            }
                        });

                File sourceFile = new File(orignal1);
                entity.addPart("image", new FileBody(sourceFile));
                totalSize = entity.getContentLength();
                httppost.setEntity(entity);

                // Making server call
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity r_entity = response.getEntity();

                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == 200) {
                    // Server response
                    responseString = EntityUtils.toString(r_entity);
                } else {
                    responseString = "Error occurred! Http Status Code: "
                            + statusCode;
                }

            } catch (ClientProtocolException e) {
                responseString = e.toString();
            } catch (IOException e) {
                responseString = e.toString();
            }
            return responseString;

        }

        @Override
        protected void onPostExecute(String result) {
         mBuilder.setContentText("Upload complete").setProgress(0, 0,false);
            mNotifyManager.notify(6532365, mBuilder.build());
            mNotifyManager.cancel(6532365);
            super.onPostExecute(result);
        }
    }

使用这个库

https://github.com/gotev/android-upload-service https://github.com/gotev/android-upload-service

通过此服务,您可以显示当前进度,它将在后台运行,这将帮助您保持应用程序的性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 使用服务将文件上传到带进度条的服务器 的相关文章

随机推荐

  • StackExchange.Redis如何订阅多个频道

    我如何订阅多个频道 据我了解 需要传递给 Subscribe 方法的 Channel 类支持模式或单通道订阅 是否可以通过一个命令订阅多个频道 例子 客户端在 3 个不同的频道上发布内容 ChannelA ChannelB 和 Channe
  • iOS 分发:将私钥/证书迁移到新机器

    我需要能够从不同于我用来提交原始文件的机器向我的应用程序提交更新 我按照文档中的说明进行操作 但是与往常一样 文档假设第一次一切正常 我尝试将我的开发人员配置文件从旧的导出到新的 但是当我提交时 应用程序加载器说它是无效签名 因此 我尝试生
  • 为根包生成 scaladoc

    我很好奇如何记录root包 显示为第一页scala 文档 http docs scala lang org 汇编 可以以某种方式创建一个引用根包的包对象 或者是否有任何配置选项 对此事的描述有些模糊 scaladoc 似乎有一个名为 doc
  • 清理 iPhone 模拟器

    在为 iPhone 模拟器构建时 是否有一种直接的方法来清理 xcode 部署应用程序的目录 我有一个 sqlite 数据库 如有必要 它会在启动时复制到 Documents 文件夹中 问题是我可能会更改我的架构 但新数据库不会被复制 因为
  • Visual Studio 2010 报告服务项目?

    因此 Visual Studio 2010 似乎不支持 SSRS 项目 至少不是旧的 有谁知道这种情况的状态是什么 以及是否可以使用 VS2010 编写新的 SSRS 报告 或者是否应该只使用 VS2008 BIDS SQL Server
  • 如何缩进 Python 列表推导式?

    列表推导式在某些情况下可能很有用 但读起来也可能相当糟糕 作为一个稍微夸张的例子 您将如何缩进以下内容 allUuids x id for x in self db query schema allPostsUuid execute tim
  • 如何在 Quickcheck 中使用修饰符(在我的例子中是积极的)

    我有一个功能 rev 它返回属于三个类型类的类型的一些值 rev Integral a Show a Read a gt a gt a rev read reverse show 我想用快速检查来测试它的一些属性 不过 我对测试 Integ
  • 相当于其他浏览器中 Firefox 的“错误控制台”

    其他浏览器中是否有与 Firefox 的 错误控制台 等效的功能 我发现错误控制台可以方便地查找 JavaScript 错误 但似乎没有一种等效的简单方法可以在其他浏览器上查看错误消息 我对 Internet Explorer Opera
  • 使用 POST COMMIT 挂钩在 SVN 存储库上提交代码时自动触发 Jenkins 作业

    我正在尝试使用 Jenkins docker 和 Ansible 来实现 CI CD 管道 我正在为我的版本控制系统使用 SVN 代码存储库 对于部署和 SVN 代码存储库 我使用 AWS EC2 部署和代码存储库位于单独的虚拟机中 我的要
  • Angular 2 - 导入外部传单打字稿库

    我正在尝试将打字稿传单库导入到我的 Angular 2 应用程序中 这是我的地图组件 我已经使用 tsd install 安装了 leaflet d ts 并且我的应用程序没有抱怨
  • 实体框架:添加迁移失败并无法更新数据库

    我已经在一个项目 VS2012 Express 中的 ASP NET MVC 中使用实体框架 5 0 一段时间了 但现在 我无法再添加迁移 PM gt Add Migration projectName MyProject DAL Test
  • Eclipse 中 HTML JavaScript jQuery 中可用 CSS 类的自动补全

    我正在使用最新的 Eclipse 版本 现在我正在使用 Javascript jQuery HTML 和 CSS 进行编码 如何让我在 CSS 中定义的类自动完成 显示在 CSS 中定义的所有可用类 并在 HTML 中显示 我的 CSS 文
  • 如何从列中删除回车符和换行符?

    我正在尝试从 csv 文件导入的列中删除回车符和换行符 我正在使用代码 SELECT replace replace column CHAR 13 CHAR 10 FROM table 它正确找到所有 CR 和 LF 但不更新数据库 您的查
  • Google Play 服务无法在模拟器上运行

    我正在尝试在模拟器上测试简单的地图应用程序 我还在模拟器上安装了以下 Apkscom google android gms 1 apk and com android vending 1 apk and Google Play Store
  • 应用自定义域后,Azure 上的 Web 应用程序加载缓慢

    我刚刚开始在 Azure 上托管我的网站 最初在 xxxx azurewebsites net 上上传和托管网站时 性能和响应都非常好 添加自定义域 从 Godaddy 购买 后 性能变得最差 页面加载需要 1 分钟 xxxx azurew
  • 此查询如何创建逗号分隔列表 SQL Server?

    我在谷歌的帮助下编写了这个查询 从表中创建一个分隔列表 但我不明白这个查询中的任何内容 谁能解释一下发生了什么事 SELECT E1 deptno allemp Replace SELECT E2 ename AS data FROM em
  • Django - 在子路径中运行时静态文件的问题

    我有 django 应用程序在子路径中运行example com api 大部分是rest API 我使用django rest framework 所有请求都正常工作 但是静态文件到处都有错误的路径 在管理面板和请求页面中 在 djang
  • 我什么时候应该(不)想在我的代码中使用 pandas apply() ?

    我在 Stack Overflow 上看到很多涉及 Pandas 方法使用的问题的答案apply 我还看到有网友在下面评论说 apply速度慢 应该避免 我读过很多关于性能主题的文章 这些文章解释了apply是慢的 我还在文档中看到了关于如
  • 如何在 ActionLink 中使用/传递隐藏字段值

    我在 actionlink 参数中传递隐藏字段值时遇到问题 产品查看 Html ActionLink ProductCompare ProductCompare new ProductIds hdnSelectedProductId Htm
  • Android 使用服务将文件上传到带进度条的服务器

    我已经使用 asynctask 实现了带有进度条的上传文件 但大文件或上传多个文件会挂起我的活动 现在我想做同样的事情 但使用服务而不是使用 asynctask 这是我的代码 private class UploadFileToServer