Android 等待函数完成并返回响应,然后继续forloop

Android 等待函数完成并返回响应,然后继续forloop,android,for-loop,response,wait,Android,For Loop,Response,Wait,我是Android开发新手。我正在将值从for循环发送到打印机,我必须等待打印机的响应以发送下一个数据。 这是我的密码: for (int a = 0; a<strings.size();a++) { final String ab=strings.get(a); String test1 = urat.readSerialData(path); //response from printer System.out.println(test1); if(test1=="ok

我是Android开发新手。我正在将值从for循环发送到打印机,我必须等待打印机的响应以发送下一个数据。 这是我的密码:

for (int a = 0; a<strings.size();a++) {
  final String ab=strings.get(a);
  String test1 = urat.readSerialData(path); //response from printer
  System.out.println(test1);
  if(test1=="ok"){
    urat.writeData2Serial(ab, path);//send data from printer
  }//then continue to loop                           
}

for(int a=0;a如果我正确理解了这个问题,您需要等待
urat.readSerialData(path)
返回
“ok”
,这样您就可以将数据发送到打印机。如果是这种情况,您应该在
的同时
循环中检查它。类似这样:

for (int a = 0; a<strings.size();a++) {
  final String ab=strings.get(a);
  String test1 = urat.readSerialData(path); //response from printer

  while(test1!="ok"){
    test1 = urat.readSerialData(path);
    continue;
  }
  urat.writeData2Serial(ab, path);//send data from printer
}

for(int a=0;a如果我正确理解了这个问题,您需要等待
urat.readSerialData(path)
返回
“ok”
,这样您就可以将数据发送到打印机。如果是这种情况,您应该在
的同时
循环中检查它。类似这样:

for (int a = 0; a<strings.size();a++) {
  final String ab=strings.get(a);
  String test1 = urat.readSerialData(path); //response from printer

  while(test1!="ok"){
    test1 = urat.readSerialData(path);
    continue;
  }
  urat.writeData2Serial(ab, path);//send data from printer
}

对于(int a=0;a我有一些解决方案,您可以使用线程和Join()方法等待函数完成其工作

让我们看一个例子 -首先,添加一个回调函数

interface OnComplete {
    void onCompleteCall(String res)
}
-在内部循环之后,您应该传递这个回调,因为我们需要使用接口传递结果

for (int a = 0; a<strings.size();a++) {
  final String ab=strings.get(a);
  urat.readSerialData(path, new DashboardActivity.OnComplete() {
            @Override
            public void onCompleteCall(String str) {
                System.out.println(str);
                if(str=="ok"){
                   urat.writeData2Serial(ab, path);//send data from printer
                }//then continue to loop   
            }
        }); 

}
-最后,我们需要开始线程,这样在循环的上方下方,您可以像这样开始线程

for(Thread t :  mList){
            try {
                t.start();
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

我对此有一些解决方案,您可以使用线程和Join()方法等待函数完成其工作

让我们看一个例子 -首先,添加一个回调函数

interface OnComplete {
    void onCompleteCall(String res)
}
-在内部循环之后,您应该传递这个回调,因为我们需要使用接口传递结果

for (int a = 0; a<strings.size();a++) {
  final String ab=strings.get(a);
  urat.readSerialData(path, new DashboardActivity.OnComplete() {
            @Override
            public void onCompleteCall(String str) {
                System.out.println(str);
                if(str=="ok"){
                   urat.writeData2Serial(ab, path);//send data from printer
                }//then continue to loop   
            }
        }); 

}
-最后,我们需要开始线程,这样在循环的上方下方,您可以像这样开始线程

for(Thread t :  mList){
            try {
                t.start();
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

您面临的问题是什么?是
writeData2Serial
异步吗?它是否返回任何内容?writeData2Serial不返回任何内容。我将字符串发送给它进行打印。但在此之前,我必须使用“readSerialData”检查打印机是否准备就绪。我从“readSerialData”获得“ok”响应。您面临的问题是什么?是
writeData2Serial
异步吗?它是否返回任何内容?writeData2Serial不返回任何内容。我将字符串发送给它进行打印。但在此之前,我必须使用“readSerialData”检查打印机是否准备就绪。我从“readSerialData”得到“ok”响应.是的,这就是我的问题。我来核实一下。是的,这就是我的问题。我来核实一下。