进度条与文件解压

2024-02-03

我正在尝试更新progress bar将文件解压缩到 SD 卡中。我的解压工作正常,但是progress bar没有出现。这是我在 mainactivity 中的代码:

private ProgressBar bar;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    bar = (ProgressBar) findViewById(R.id.progress);

    String zipFilename = Environment.getExternalStorageDirectory() + "path to my zip file in sd card";  
    String unzipLocation = Environment.getExternalStorageDirectory() + "the output folder";  




    Decompress d = new Decompress(zipFilename, unzipLocation);  
    d.unzip(); 
}

public class Decompress {   
    private String _zipFile;   
    private String _location;
    private int per = 0;



    public Decompress(String zipFile, String location) {
        _zipFile = zipFile;     
        _location = location;      
        _dirChecker("");   
        }    
    public void unzip() {     
        try  {       
            ZipFile zip = new ZipFile(_zipFile);
            bar.setMax(zip.size());
            FileInputStream fin = new FileInputStream(_zipFile);       
            ZipInputStream zin = new ZipInputStream(fin);
            ZipEntry ze = null;       
            while ((ze = zin.getNextEntry()) != null) {

                Log.v("Decompress", "Unzipping " + ze.getName());          
                if(ze.isDirectory()) {           
                    _dirChecker(ze.getName());         
                    } else {      
// Here I am doing the update of my progress bar

                        per++;
                        bar.setProgress(per);
                        FileOutputStream fout = new FileOutputStream(_location + ze.getName());           
                        for (int c = zin.read(); c != -1; c = zin.read()) {  

                            fout.write(c);           
                            }            
                        zin.closeEntry();          
                        fout.close();         
                        }                
                }       
            zin.close();    
            } catch(Exception e) {       
                Log.e("Decompress", "unzip", e);    
                }    
        }    
    private void _dirChecker(String dir) {     
        File f = new File(_location + dir);      
        if(!f.isDirectory()) {       
            f.mkdirs();     
            }   
        }

    }
}

您的解压缩代码在主/UI 线程上运行,从而冻结了 UI。您想使用在后台线程中进行解压缩AsyncTask.

您的案例示例:

 private class Decompress extends AsyncTask<Void, Integer, Integer> {

   private String _zipFile;   
   private String _location;
   private int per = 0;

   public Decompress(String zipFile, String location) {
       _zipFile = zipFile;     
       _location = location;      
       _dirChecker("");   
   }


    @Override
    protected Integer doInBackground() {
        try {
            ZipFile zip = new ZipFile(_zipFile);
            bar.setMax(zip.size());
            FileInputStream fin = new FileInputStream(_zipFile);
            ZipInputStream zin = new ZipInputStream(fin);
            ZipEntry ze = null;
            while ((ze = zin.getNextEntry()) != null) {

                Log.v("Decompress", "Unzipping " + ze.getName());
                if (ze.isDirectory()) {
                    _dirChecker(ze.getName());
                } else {
                    // Here I am doing the update of my progress bar

                    per++;
                    publishProgress(per);

                    FileOutputStream fout = new FileOutputStream(_location + ze.getName());
                    for (int c = zin.read(); c != -1; c = zin.read()) {
                        fout.write(c);
                    }
                    zin.closeEntry();
                    fout.close();
                }
            }
            zin.close();
        } catch (Exception e) {
            Log.e("Decompress", "unzip", e);
        }
        return totalSize;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        bar.setProgress(per); //Since it's an inner class, Bar should be able to be called directly
    }

    @Override    
    protected void onPostExecute(Integer... result) {
        Log.i("Completed. Total size: " + result);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进度条与文件解压 的相关文章

  • Android 在打开应用程序时会广播吗?

    例如 如果我想知道Youtube何时打开 是否有与之相关的广播 我当然知道我可以轮询 logcat 消息来检查活动 但我可以通过广播来做到这一点吗 因为它会少得多的耗电 此链接似乎表明这是不可能的 如何跟踪 Android 中的应用程序使用
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Android 如何更改 OnTouchListener 上的按钮背景

    你好 我在 xml 中有一个按钮 我正在使用OnTouchListener在我的活动中获得button按下并释放 但问题是 当我按下按钮时背景颜色没有改变 当我延长可能的活动时OnClickListener背景正在改变 任何人都可以告诉我的
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • 出现错误错误:res/menu/mainMenu.xml:文件名无效:必须仅包含[a-z0-9_。]

    我是安卓新手 刚刚开始使用 我在 res 文件夹中创建了一个文件 menu mainMenu xml 但我得到了错误 Error res menu mainMenu xml invalid file name must contain on
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

    我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角 如此处所述https developer android com guide topics sensors sensors position https
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • Android FragmentTransaction 自定义动画(未知动画师名称:Translate)

    我正在尝试让自定义动画与我的片段一起使用 我已按照在线教程进行操作 但出现以下错误 java lang RuntimeException 未知的动画师名称 翻译 动画的 XML 如下
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • 如何修改 Skobbler 注释而不重新添加它

    我必须修改 SKAnnotation 的图像 注释生成器代码 private SKAnnotation getAnnotationFromView int id int minZoomLvl View view SKAnnotation a
  • Android:监听状态栏通知

    有没有办法在状态栏被下拉时监听通知 1 用于检测状态栏变化 您可以注册一个监听器来获取系统UI可见性变化的通知 因此 要在您的活动中注册侦听器 Detecting if the user swipe from the top down to
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • Android:AsyncTask ProgressDialog 将不会在 ActivityGroup 中打开

    我试图在轮询我的服务器时打开一个进度对话框 该类是一个 ActivityGroup 因为它嵌套在选项卡栏中 为了将视图保持在框架内 需要 ActivityGroup 这是我的 ActivityGroup 类的声明 public class
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

  • 同步语句中的wait()、notify()和notifyAll()

    尝试调用时出现以下错误notifyAll 在同步语句中 在同步上下文之外调用 Object notify 例子 final List list new ArrayList synchronized list invoked notifyAl
  • 是否有适用于 IE6 和 7 的 W3C 兼容 hack?

    IE6 和 7 中是否有有效的 W3C 兼容性破解方法 我相信使用 hack 时存在 W3C 不兼容性 例如 使用以下 CSS 代码 如本文选项 2 中的建议 http webdesignerwall com tutorials css s
  • 使用 Jest 和 React 测试库测试 `img.onLoad`/`img.onError`

    今天下午 我们的团队在使用 Jest 为我们的项目编写 React 测试库 RTL 测试时遇到了一个场景
  • 反序列化 JSON 时出错无法将 JSON 对象反序列化为“System.String”类型

    我有以下 JSON workspace name Dallas dataStores http 8080 geoserver rest workspaces Dallas datastores json coverageStores htt
  • 尝试在 Windows PC 上禁用处理器空闲状态(C 状态)

    我需要防止处理器进入空闲状态 非C0 C状态 诚然 我对处理器 C 和 P 状态了解不多 所以请耐心等待 我们使用来自第三方供应商的相机 该相机偶尔会提供损坏的帧 供应商已确定 当 CPU 进入空闲状态时 它会干扰通过火线传输帧 为了确认这
  • Python 和服务器负载

    有没有办法使用Python定期检查Linux机器的服务器负载并以某种方式通知我 Python 有一个函数可以获取系统的平均负载 作为 os 模块的一部分 gt gt gt import os gt gt gt os getloadavg 1
  • 如何为 ElevatedButton 上的背景颜色设置动画?

    当我的 ElevatedButton 将其状态更改为禁用时 我想在两种背景颜色之间创建淡入淡出 我该怎么做 final buttonStyle ElevatedButton styleFrom backgroundColor Colors
  • C++ 从进程获取用户名

    我有一个进程句柄 HANDLE hProcess OpenProcess PROCESS QUERY INFORMATION PROCESS VM READ 0 THE PROCESS ID 如何获取正在运行该进程的用户的用户名 我正在使用
  • ASP.NET Core Url.Action 返回空字符串

    在 stackoverflow 上浏览了 3 小时后 我没有找到问题的解决方案 所以我怀疑我的项目中有一些特别的东西 我在 Visual Studios 2017 上有一个 ASP NET Core 2 0 WebApplications
  • 获取初始实体框架迁移脚本

    我刚刚安装了 Entity Framework Migrations 向类添加了一个属性 并尝试了 EF Migrations 我的开发数据库得到了及时更新 到目前为止 一切都很好 现在 我想为此创建一个更改脚本initial使用生产数据库
  • 更改 Google 工作表上特定单元格的背景颜色

    我正在处理这个绑定到 Google Sheets 电子表格的脚本 我在其中从时间驱动的触发器运行这个函数 我希望能够定位工作表上的特定单元格 如果单元格值 打开 以便我可以更改单元格的背景颜色 我想知道我该如何去做这项工作 我能够定位单元格
  • 在 Meteor.js 中查找当前会话 ID

    如何找到客户端当前的Session Id 我能够获得看起来像是最后一个会话 ID 而不是当前会话 ID console log Meteor default connection lastSessionId 这个措辞有点令人困惑 但是 la
  • 无法在 p:media 中显示从 Primefaces 中的流内容生成的 PDF

    我正在尝试显示在新浏览器窗口中打开的内联 PDF 我有以下场景 在由ajax调用的一些ActionListen中 我生成PDF内容 将数据放入会话中 并发送要执行的Javascript window open打开新页面以显示 PDF 在打开
  • 如果日期带有前导零,则 getDay() 返回错误的日期[重复]

    这个问题在这里已经有答案了 我在使用 javascript 时遇到了这个问题 我从数据库中获取 yyyy mm dd 日期 但是当我想使用 getDay 获取星期几时 如果这一天带有前导零 我会得到错误的数字 我写了一个可能的解决方案来将
  • 在 LinkedIn 上分享 描述字段未显示在新用户界面中

    用户在新用户界面上通过 LinkedIn API 上的共享发布的帖子最多会显示在其帐户上 用户消息 评论 图像 标题和链接域 但是 有关在 LinkedIn API 上共享的文档 https developer linkedin com d
  • 搜索视图未显示在工具栏中

    我实际上在支持 AppCompat v7 lib 24 0 0 上的 Searchview 有问题 SearchView 不显示任何文本和输入文本 看屏幕截图 搜索查询工作完美 这是我的菜单 menu menu
  • 无法以 null 启动服务 [服务名称]

    我最近编写了一个 Android Widget 并在模拟器和我的 Galaxy S 上进行了测试 它在两者上都运行良好 在我将其发布到 Android 市场后 现在我收到了一些错误报告 我在 Widget 类的 onUpdate 中声明一个
  • Azure 函数无法启动 - “未响应端口 X 上的 HTTP ping”(Docker/VNet)

    我真的很难弄清楚如何设置使用 Docker 容器映像并连接到 VNet 的 Azure Function 我在任何地方都找不到此设置的任何示例 我遇到的主要问题是 在我的容器启动并运行后 它似乎没有响应底层框架用于确定该功能是否启动并运行的
  • codechef 和 spoj 问题中使用的 modulo 10^9+7 有何意义?

    我正在研究一个问题 http www codechef com SEPT14 problems CHEFLR它需要输出为 对于每行输出答案模 10 9 7 为什么是模 10 9 7包含在问题中吗 其意义何在 我不是在寻找问题的解决方案 仅该
  • 进度条与文件解压

    我正在尝试更新progress bar将文件解压缩到 SD 卡中 我的解压工作正常 但是progress bar没有出现 这是我在 mainactivity 中的代码 private ProgressBar bar Override pub