baidu_19694879
2016-02-24 09:04
采纳率: 50%
浏览 2.7k

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条回答 默认 最新

  • 苍蝇小黑 2016-02-25 02:14
    已采纳

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

    已采纳该答案
    打赏 评论
  • bdmh 2016-02-24 09:16

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

    打赏 评论
  • Antway_ 2016-02-24 09: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 2016-02-24 09:52

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

    打赏 评论
  • daweibalang717 2016-02-24 09: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();
        }
    }
    
    打赏 评论
  • 丑旦 2016-02-24 10:11
        currentProgress = cirProgress.getProgress(); 
    

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

    打赏 评论
  • tzizi5566 2016-02-24 13:14

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

    打赏 评论

相关推荐 更多相似问题