首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >显示以百分比表示的进度对话框

显示以百分比表示的进度对话框
EN

Stack Overflow用户
提问于 2016-02-20 17:42:05
回答 2查看 2.3K关注 0票数 2

我正在使用异步任务从互联网下载一些文件。对于这个问题,我知道向用户展示到目前为止的进展是非常相关的。我下载文件的所有实现都非常成功,但唯一的问题是进度对话框,即使启动了下载命令,这也显示为0%。

我就是这样做的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // Show Dialog Box with Progress bar
  @Override
  protected Dialog onCreateDialog(int id) {
    switch (id) {
        case progress_bar_type:
            prgDialog = new ProgressDialog(this);
            prgDialog.setMessage("Downloading Mp3 file. Please wait...");
            prgDialog.setIndeterminate(false);
            prgDialog.setMax(100);
            prgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            prgDialog.setCancelable(false);
            prgDialog.show();
            return prgDialog;
        default:
            return null;
    }
}



// Async Task Class
class DownloadMusicfromInternet extends AsyncTask<String, String, String> {

    // Show Progress bar before downloading Music
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Shows Progress Bar Dialog and then call doInBackground method
        showDialog(progress_bar_type);
    }

    // Download Music File from Internet
    @Override
    protected String doInBackground(String... f_url) {
        int count;
        try {
            URL url = new URL(f_url[0]);
            URLConnection conection = url.openConnection();
            conection.connect();
            // Get Music file length
            int lenghtOfFile = conection.getContentLength();
            // input stream to read file - with 8k buffer
            InputStream input = new BufferedInputStream(url.openStream(),10*1024);
            // Output stream to write file in SD card
            OutputStream output = new FileOutputStream(f_url[1]);
            byte data[] = new byte[1024];
            long total = 0;
            while ((count = input.read(data)) != -1) {
                total += count;
                // Publish the progress which triggers onProgressUpdate method
                publishProgress("" + (int) ((total * 100) / lenghtOfFile));

                // Write data to file
                output.write(data, 0, count);
            }
            // Flush output
            output.flush();
            // Close streams
            output.close();
            input.close();
        } catch (Exception e) {
            Log.e("Error: ", e.getMessage());
        }
        return null;
    }

    // While Downloading Music File
    protected void onProgressUpdate(String... progress) {
        // Set progress percentage
        prgDialog.setProgress(Integer.parseInt(progress[0]));
    }

    // Once Music File is downloaded
    @Override
    protected void onPostExecute(String file_url) {
        // Dismiss the dialog after the Music file was downloaded
        dismissDialog(progress_bar_type);
        Toast.makeText(getApplicationContext(), "Download complete, playing Music", Toast.LENGTH_LONG).show();
    }
}

请根据下载时间的移动,如何使进度移动。谢谢你的帮助。

更新

我认为这个问题与所谓的重复问题不一样,我研究后的问题来自于int lenghtOfFile = conection.getContentLength();

进程不会移动,因为getContentLength()总是返回-1,因为它无法从服务器获得文件大小。我见过很多这样的问题,但都没有答案。请问有出路吗?我很想知道。先谢

EN

回答 2

Stack Overflow用户

发布于 2016-02-21 00:39:26

正如您在评论中所说的,getContentLength()正在返回-1。这将导致您的进度更新始终是负面的,这意味着进度条永远不会前进。这就是为什么它没有像你期望的那样移动。

根据javadoc,当没有内容长度头或由于某种原因不能将其解析为数字时,getContentLength()返回-1。在这种情况下,您无法提供基于下载文件大小的进度表。

票数 0
EN

Stack Overflow用户

发布于 2016-02-21 08:21:53

如果进度条设置为不确定,则不需要调用prgDialog.setProgress(Integer.parseInt(progress[0]));。这可能就是为什么没有显示出进步的原因。

下载开始时调用prgDialog.setIndeterminate(true),然后在下载结束时调用prgDialog.setIndeterminate(false)。在使用不确定进度条时,请避免调用setProgress

编辑:矩形:从官方文件调用,如果条形图处于不确定模式,setProgress什么也不做。

此外,您还说要将不确定值设置为true,但是在onCreateDialog方法中我看到了prgDialog.setIndeterminate(false);

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35531302

复制
相关文章
python dropwhile跳过开头的几行
from itertools import dropwhile with open('/etc/passwd') as f: ... for line in dropwhile(lambda line: line.startswith('#'), f): ... print(line, end='') from itertools import islice items = ['a', 'b', 'c', 1, 4, 10, 15] for x in
用户5760343
2019/09/30
1.7K0
pythoncharm注释快捷键_多行注释以什么开头
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174489.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
1.6K0
pythoncharm注释快捷键_多行注释以什么开头
为什么浏览器的用户代理字符串以 Mozilla 开头?
为什么浏览器的用户代理字符串(user-agent string)以 Mozilla 开头? 最早流行的浏览器是 NCSA Mosaic,它称自己为 NCSA_Mosaic/2.0 (Windows
前端教程
2018/03/29
1.4K0
为什么浏览器的用户代理字符串以 Mozilla 开头?
在文件每一行开头增加字符串
首先,使用vim 打开某txt文件,输入冒号,并输入%s/^/,之后输入要添加的字符串即可
DoubleV
2022/03/25
1.1K0
python字符串匹配开头_对python 匹配字符串开头和结尾的方法详解
1、你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等。检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法。比如:
全栈程序员站长
2022/09/13
2.8K0
原理分析:使用 dd 跳过开头若干字节快速拷贝文件
  计算机中每一次向硬盘读取和写入数据,无论读多小的数据量,都至少需要花一段常数时间(称为overhead)。 (就像你去超市买鸡蛋一样,无论你一次只买一个,还是一千个,你都至少要花从家走到超市,再从超市走回家的时间。)
Miigon
2022/10/27
1.2K0
ES6字符串模板多行清除行头空格制表符
对于多行文本我肯定优先考虑用 ES6字符串模板来实现,直接使用的效果并不是很符合想要的。
CRPER
2019/11/29
1K0
php用空格分隔字符串,分割字符串空格[通俗易懂]
String[] data = s.split(“@”); // 以@分割字符串,获得@后的值。
全栈程序员站长
2022/11/16
6.3K0
Java 多行字符串
在本文中,我们来说说 Java 的多行字符串(multiline strings )。
HoneyMoose
2022/08/08
4.2K0
Java 多行字符串
python 字符串开头结尾匹配
filename = 'spam.txt' filename.endswith('.txt') True filename.startswith('file:') False url = 'http://www.python.org' url.startswith('http:') True 或者正则 import re url = 'http://www.python.org' re.match('http:|https:|ftp:', url) <_sre.SRE_Mat
用户5760343
2022/01/10
1.7K0
php删除字符串的空格
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105882.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
3.6K0
字符串:替换空格
示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."
代码随想录
2020/09/10
4.6K0
字符串:替换空格
带空格的字符串反转
就是输入一段文本,然后让你实现字符串反转。 肺炎严重,假期延长,闲的不得不自主学习,然后就日常刷水题。 第一次的方法,简单易懂,就是时间超限了。TLIM #include<bits/stdc++.h> using namespace std; stack<string> st; int main(){ string s; cin>>s; reverse(s.begin(),s.end()); st.push(s); while(getchar() != '\n'){ cin>>s; re
杨鹏伟
2020/09/11
1.3K0
JS去除字符串的空格
JS去除字符串前后空格 //去前后空格 //var LO = data.replace(/(^\s*)|(\s*$)/g, ""); //var LA = data.replace(/(^\s*)|(\s*$)/g, ""); JS去除字符串所有空格 //直接去除所有的空格 var LL = data.replace(/\s+/g,""); 在Kettle做数据清洗中用到的: //Script here //去前后空格 //var LO = LONGITUDE.replace(/(^\s*)|(\s*
手撕代码八百里
2020/07/28
8K0
python 匹配字符串开头和结尾
1.你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等。检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法。比如:
全栈程序员站长
2022/09/16
1.3K0
算法-字符串替换空格
chaibubble
2018/01/02
2.4K0
算法-字符串替换空格
android空格字符串_v1d空格复制
&#160; == &nbsp; == &#xA0; == no-break space (普通的英文半角空格但不换行)
全栈程序员站长
2022/09/30
8240
关于字符串切割空格
注意: 不要在split方法中写" ", 这样只能匹配到一个空格 String s = "hello world you"; String[] split = s.split("\\s+"); for (String s1 : split) { System.out.println(s1); }
乐心湖
2020/07/31
1.1K0
python 字符串去空格
1、lstrip:删除左边的空格 这个字符串方法,会删除字符串s开始位置前的空格。
全栈程序员站长
2022/09/03
2.6K0
Python字符串开头或末尾匹配
当你需要通过指定的文本模式去检查字符串的开头或者结尾的时候,比如文件名后缀,URL Scheme等等。
后场技术
2020/09/03
1.8K0

相似问题

在多行开头添加空格

443

sscanf跳过开头的空格

10

匹配以空格开头的多行

12

删除多行字符串变量中每一行开头的空格。

55

字符串开头的跳过模式

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文