当1个验证返回true时,如何断开for() loop
。
public void printOut (){
final Handler handler = new Handler();
for (final int[] x = {0}; x[0] < Integer.parseInt(spinner.getSelectedItem.toString()); x[0]++) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
//printer for my device
int query = PrinterInterface.queryStatus();
if (query == 1){
// return true
//printing goes here..
}else{
// returns false
x[0] = Integer.parseInt(spinner.getSelectedItem.toString());
}
}
},2000 * x[0]);
}
}
这是我的代码ATM,如果query
的值返回不等于1,它将继续执行else语句,并使变量x[0]
在Spinner
上相等。但是问题是它仍然在循环。我怎样才能阻止它?谢谢!
更新
我找到了问题。如何在}, 2000 * loopVariable[0]);
上打断这部分?或停止Handler()
答案 0 :(得分:1)
您必须为句柄canceled
的状态设置var
例如,通过您的代码。
public void printOut (){
final Handler handler = new Handler();
boolean isCanceled = false
for (final int[] x = {0}; (x[0] < Integer.parseInt(spinner.getSelectedItem.toString()) && !isCanceled); x[0]++) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
//printer for my device
int query = PrinterInterface.queryStatus();
if (query == 1){
isCanceled = true
// return true
//printing goes here..
}else{
// returns false
x[0] = Integer.parseInt(spinner.getSelectedItem.toString());
}
}
},2000 * x[0]);
}
而且,如果要处理结果,则需要添加回调。
但是,我不明白,为什么使用poseDelayed
,在for
中,您是启动所有处理程序的。
更好,如果您选中query
,则在Handler
之后执行逻辑
答案 1 :(得分:0)
我不知道您为什么在handler
中使用for
,如果您的打印代码需要进行后台处理并尝试使用AsyncTask更新UI,则其中包含doInBackground
, onProgressUpdate
和onPostExecute
,以便您更高效地处理代码。
答案 2 :(得分:0)
我解决了!解决方案只是一个行代码-_-,我还为Runnable
添加了一个变量。谢谢您对pskink的帮助。
public void printOut (){
final Handler handler = new Handler();
for (final int[] x = {0}; x[0] < Integer.parseInt(spinner.getSelectedItem.toString()); x[0]++) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
//printer for my device
int query = PrinterInterface.queryStatus();
if (query == 1){
// return true
//printing goes here..
}else{
// returns false
x[0] = Integer.parseInt(spinner.getSelectedItem.toString());
handler.removeCallbacksAndMessages(null);
}
}
},2000 * x[0]);
}