2017-08-10 2 views
1

Je suis nouveau sur le développement Android. Je travaille sur l'envoi de valeurs d'une boucle for à l'imprimante et je dois attendre la réponse de l'imprimante pour envoyer les données suivantes. Voici mon code:Attendez que la fonction se termine et retournez la réponse, puis continuez avec

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       
} 

S'il vous plaît me guider au sujet en partageant une référence ou me aider: comment puis-je faire cela? Merci d'avance.

+0

Quel problème face à vous? est-ce que 'writeData2Serial' est asynchrone? Est-ce que ça retourne quelque chose? –

+0

WriteData2serial ne renvoie rien. Je lui envoie la chaîne pour l'impression. Mais avant cela, je dois vérifier si l'imprimante est prête en utilisant "readSerialData". Je reçois une réponse "ok" de "readSerialData". –

Répondre

0

Si j'ai correctement compris le problème, vous devez attendre jusqu'à ce que urat.readSerialData(path) renvoie "ok" afin que vous puissiez envoyer les données à l'imprimante. Si c'est le cas, vous devriez le vérifier dans une boucle while. Quelque chose comme ça:

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 
} 
+0

Oui c'est mon problème. Je vais vérifier avec ça. –

0

J'ai une solution à ce sujet, vous pouvez utiliser Discussion et méthode join() attendre jusqu'à ce que votre fonction terminer son travail

permet de voir l'exemple -Premier, ajouter un fonction de rappel

interface OnComplete { 
    void onCompleteCall(String res) 
} 

de -après dans la boucle, vous devez passer cette coz de rappel, nous devons passer résultat en utilisant l'interface

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 
      } 
     }); 

} 

-Nous ajouter chaque discussion à la liste Liste initialize d'abord et ajouter

List<Thread> mList = new ArrayList<>(); 

-Votre look méthode comme celui-ci & ajouter un fil d'une tâche de Performe sous méthode run().

readSerialData(String path, OnComplete onComplete){ 
    Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       //Your logic 
       onComplete.onCompleteCall("Return your result") 
      } 
     }); 
    mList.add(thread); 
} 

dernière -One nous devons commencer discussion qui est en bas de la boucle supérieure pour vous pouvez commencer le fil comme celui-ci

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