Je suis nouveau sur Java et j'essaie de créer une application Android qui lit périodiquement certaines informations de ma variable Ubidots.Java ScheduledExecutorService s'exécute une seule fois
Après quelques recherches, je en ligne a réussi à trouver cette façon de le faire ..
Le problème est qu'il exécute une seule fois. Après la première itération, il ne passe plus jamais par syncTimer.
Runnable syncTimer = new Runnable() {
public void run() {
ubi.execute(0);
if (!syncComplete)
{
System.out.println("Sync not completed. We'll wait");
while (!syncComplete)
{
//wait.
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
try
{
syncComplete(tempValue, g_tempVal.toString());
}
catch (Exception e)
{
System.err.println("error in executing. It will no longer be run!");
e.printStackTrace();
throw new RuntimeException(e);
}
}
});
}
};
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(syncTimer, 0, 2, TimeUnit.SECONDS);
Ceci est mon code, de l'aide pour ce problème? Je suis à court d'idées quoi chercher sur google pour trouver un moyen de le résoudre.
Je n'ai jamais programmé en Java/Android, seulement utilisé d'autres langues. SyncComplete est un ensemble booléen après un AsyncTask qui se connecte à Ubidots et récupère des variables.
public class ApiUbidots extends AsyncTask<Integer, Void, Void> {
private final String API_KEY = "key";
private final String VARIABLE_ID = "var";
@Override
protected Void doInBackground(Integer... params) {
ApiClient apiClient = new ApiClient(API_KEY);
Variable temperature = apiClient.getVariable(VARIABLE_ID);
if (params[0] == 0)
{
g_tempVal = temperature.getValues()[0].getValue();
syncComplete = true;
}
if (params[0] == 1)
{
//implement write function
}
return null;
}
}
Votre temps s'écoule pour toujours. Le thread ne peut même pas être réutilisé depuis que vous l'avez bloqué. – Nathan
non, je n'ai pas dit, dans la description, que je le mets à vrai une fois que les données d'Ubidots sont reçues ... J'ai vérifié cela, ce n'est pas le problème ici. –