2 baidu 19694879 baidu_19694879 于 2016.02.24 17:04 提问

android 获取进度条进度值,获取有问题

android 获取进度条进度值,加断点可以获取到,不加断点就获取不到,,而且加断点是每次跑的值都不一样

这个是代码的一部分,,

btn_dignosis.setVisibility(View.GONE);
        cirProgress.setVisibility(View.VISIBLE);
        startProgress(); // 加载进度条
        currentProgress = cirProgress.getProgress();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                    currentProgress = cirProgress.getProgress();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        tv_info.setText("重新检测");
        tv_info.setEnabled(true);
        // 获取当前系统时间
        tv_lastScanTime.setText(getSysDate());
        // 下划线
        tv_info.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
        tv_info.getPaint().setAntiAlias(true);// 抗锯齿
        // 重新检测加载进度条
        tv_info.setClickable(true);
        tv_info.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startProgress(); // 重新加载进度条
            }
        });




        下面是startProgress()方法的代码

        // 加载进度条
private void startProgress() {

    if (!running) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (progress <= 58) {
                    progress += 2;
                    cirProgress.setProgress(progress);
                    try {
                        Thread.sleep(70);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                progress = 0;
                running = false;
            }
        }).start();
    }
}

7个回答

huaheshangxo
huaheshangxo   2016.02.25 10:14
已采纳

你在线程外获取线程里边的值,当自动运行的时候,两句代码之间执行消耗的时间很小,所以currentProgress不加断点的时候都是0,当你debug调试的时候,因为debug会卡在currentProgress = cirProgress.getProgress(); 给线程足够的时间能够运行,所以debug的时候能够获取到数据。
你可以使用 Mr_dsw 的方案或者使用AsyncTask。

bdmh
bdmh   Ds   Rxr 2016.02.24 17:16

肯定不一样,你这都是线程,也没有同步约束,线程执行是随机的

baidu_19694879
baidu_19694879 上面的方法的线程是后来加上去的,但是没有多大作用,,,还是那样,断点调试运行时,progress的进度值可以获取到,,不加断点就获取不到,,请问应该怎么解决呀?
2 年多之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.24 17:51

我感觉没什么问题啊!我为了模仿你的效果,自己写了一段代码进行测试的,只不过我是使用Handler进行发送消息,然后改变progres。效果挺正常的。

 public class ScollerActivity extends Activity {
    private Button btn_add;
    private int progress;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.scroller_layout);
        btn_add = (Button) findViewById(R.id.btn_add);
        btn_add.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                      while (progress <= 58) {
                            progress += 1;
                            mHandler.sendEmptyMessage(0);
                            try {
                                Thread.sleep(70);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                        progress = 0;
                    }
                }).start();
            }
        });
    }

    private Handler mHandler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            btn_add.setText("当前数值是:" + progress);
        }
    };

}
danielinbiti
danielinbiti   Ds   Rxr 2016.02.24 17:52

线程不同步,获取到的值肯定不是你想像的。
你是想进度条跑完了在执行下面的代码还是要干嘛,先说清楚需求,没看到currentProgress这个值要做什么用。

danielinbiti
danielinbiti 回复baidu_19694879: public void run() { while (progress <= 58) { progress += 2; cirProgress.setProgress(progress); } currentProgress = cirProgress.getProgress();//在while结束后获取最终值 }
2 年多之前 回复
baidu_19694879
baidu_19694879 要进度条跑完了然后获取进度条的值,,currentProgress是为了保存加载后的进度条的值,然后保存数据库
2 年多之前 回复
baidu_19694879
baidu_19694879 要进度条跑完了然后获取进度条的值,,currentProgress是为了保存加载后的进度条的值,然后保存数据库
2 年多之前 回复
daweibalang717
daweibalang717   2016.02.24 17:56

代码只有片段,你是不是想获取当前进度的值赋值给currentProgress? 试试这样呢

 btn_dignosis.setVisibility(View.GONE);
        cirProgress.setVisibility(View.VISIBLE);
        startProgress(); // 加载进度条
        tv_info.setText("重新检测");
        tv_info.setEnabled(true);
        // 获取当前系统时间
        tv_lastScanTime.setText(getSysDate());
        // 下划线
        tv_info.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
        tv_info.getPaint().setAntiAlias(true);// 抗锯齿
        // 重新检测加载进度条
        tv_info.setClickable(true);
        tv_info.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startProgress(); // 重新加载进度条
            }
        });




        下面是startProgress()方法的代码

        // 加载进度条
private void startProgress() {

    if (!running) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (progress <= 58) {
                    progress += 2;
                    cirProgress.setProgress(progress);
            currentProgress = progress ;
                    try {
                        Thread.sleep(70);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                progress = 0;
                running = false;
            }
        }).start();
    }
}
luochoudan
luochoudan   Ds   Rxr 2016.02.24 18:11
    currentProgress = cirProgress.getProgress(); 

这代码重复了两遍,到底是哪个获取的?建议你直接采用Mr_dsw 的方案吧,你说的问题,可以加些打印日志看一下变量的值,这个比断点更准确。

tzizi5566
tzizi5566   2016.02.24 21:14

也碰到过 正常运行参数出错,debug 就对的情况,最后实在没辙了就把出错的参数加上static……

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条 绑定方式通信
效果: 问题:可拖动进度条随进度条移动时,会致使音乐卡顿(待解决) xml xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/
ProgressBar进度条的实现
自定义进度条 Android中progressbar的使用
Android可显示数字进度的进度条使用教程
Android显示进度数字的进度条,支持动画,支持数字显示,支持颜色搭配自定义等
Android 自定义SeekBar显示进度百分比
效果图: 代码实现:package com.tchip.autosetting.view;import com.nineoldandroids.view.ViewHelper; import com.tchip.autosetting.R;import android.app.Dialog; import android.content.Context; import android.graphi
java阿里云oss断点续传获取上传进度
最近公司ERP系统要做上传图片功能,让我写个oss的上传功能,集成到里面.就研究了一下oss.官方文档说明:java版的SDK流式上传有上传进度,断点续传没有.在网上查询许久也没有找到相应资料.就自己看源码,断点续传获取上传进度功能也实现了.(自己有些问题上网查资料,解决了许多问题.因此自己也赶紧把自己做成的成果分享给大家.感谢网上无私奉献的人,) 因为每个人的功能需求不一样,大家可以按照我这种
阿里云 oss 小文件上传进度显示
对阿里云OSS上传小文件时的进度,想过两个方法:一是,通过多线程监测Inputstream剩余的字节数来计算,但是因为Inputstream在两个线程中共用,如果上传线程将Inputstream关闭,在监测线程就会报“句柄无效”的错误,甚至会导致上传失败;第二个方法是通过线程不断监测OSS上已经上传文件的大小,但是在文件完全上传前是不能获得文件大小的。最后突然灵感来了,把两个方法同时使用就能够监测
Android入门教程 MediaPlayer教程【使用进度条】
目标:获取手机中的歌曲,并使用MediaPlayer播放歌曲第一步:创建适配器控件第二步:创建适配器第三步:绑定适配器第四步:为MediaPlayer创建播放、暂停、上一曲、下一曲、停止方法第五步:使用Thread和SeekBar实现进度条MainActivitypublic class MainActivity extends Activity { private ListView musi
DownloadManager获取当前下载进度
转载:http://blog.csdn.net/sir_zeng/article/details/8983430 从Android 2.3(API level 9)开始,Android用系统服务(Service)的方式提供了Download Manager来优化处理长时间的下载操作。Download Manager处理HTTP连接并监控连接中的状态变化以及系统重启来确保每一个下载任务顺利完成
Android-SeekBar进度条的使用
Android-SeekBar进度条的使用在我们使用音乐播放器或者是视频播放器时,下面都会有一个进度条,拖动进度条即可改变 音乐的进度和视频播放的进度,那么在安卓里面也有相应的工具类,它就是SeekBar制作可拖动的进度条 首先是布局文件 activity_main.xml 使用两个TextView用来显示是否拖动以及拖动到了哪一个位置<LinearLayout xmlns:android=
Android开发播放视频控制进度的控件VideoView
配置权限: uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE”> 代码片: public class MainActivity extends AppCompatActivity { private VideoView vv; @Override protected