问题描述
- 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(); } }
解决方案
你在线程外获取线程里边的值,当自动运行的时候,两句代码之间执行消耗的时间很小,所以currentProgress不加断点的时候都是0,当你debug调试的时候,因为debug会卡在currentProgress = cirProgress.getProgress(); 给线程足够的时间能够运行,所以debug的时候能够获取到数据。
你可以使用 Mr_dsw 的方案或者使用AsyncTask。
解决方案二:
肯定不一样,你这都是线程,也没有同步约束,线程执行是随机的
解决方案三:
我感觉没什么问题啊!我为了模仿你的效果,自己写了一段代码进行测试的,只不过我是使用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);
}
};
}
解决方案四:
线程不同步,获取到的值肯定不是你想像的。
你是想进度条跑完了在执行下面的代码还是要干嘛,先说清楚需求,没看到currentProgress这个值要做什么用。
解决方案五:
代码只有片段,你是不是想获取当前进度的值赋值给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();
}
}
解决方案六:
currentProgress = cirProgress.getProgress();
这代码重复了两遍,到底是哪个获取的?建议你直接采用Mr_dsw 的方案吧,你说的问题,可以加些打印日志看一下变量的值,这个比断点更准确。
解决方案七:
也碰到过 正常运行参数出错,debug 就对的情况,最后实在没辙了就把出错的参数加上static……
时间: 2024-12-30 08:39:28