J'essaie d'afficher un ProgressDialog pendant que je charge des données à partir d'une API. J'ai mis l'APIPost dans un fil, et à des fins de débogage, j'ai mis le fil en veille pendant 3 secondes en essayant de faire apparaître la boîte de dialogue. Toutefois, lorsque je démarre le thread, aucune boîte de dialogue n'apparaît et le thread d'interface utilisateur se bloque simplement. Est-ce que je manque quelque chose?ProgressDialog ne s'affiche pas lorsque thread est en cours d'exécution
final ProgressDialog dialog;
dialog = new ProgressDialog(MyClassName.this);
dialog.setTitle("");
dialog.setMessage("Loading...");
dialog.setCancelable(false);
Thread runner = new Thread(){
JSONObject jTemp;
@Override
public void run(){
try {
synchronized(this){
wait(3000);
}
getFarmProperties.postAPI(tempAddress);
do {
jTemp = getFarmProperties.getJSON();
} while (jTemp == null);
}
catch(InterruptedException ex){
}
}
};
try {
runner.start();
dialog.show();
runner.join();
dialog.dismiss();
} catch (Exception e) {
e.printStackTrace();
}
Y a-t-il une raison pour laquelle vous n'utilisez pas un AsyncTask à la place? – ElliotM
J'utilise un AsyncTask dans ma méthode postAPI. J'ai essayé de mettre cela dans un AsyncTask avec les mêmes résultats –
D'où appelez-vous cela? 'runner.join()' provoque le thread en cours à attendre que le thread d'arrière-plan se termine. Si vous appelez cela sur le thread d'interface utilisateur, vous arrêtez effectivement votre interface utilisateur de la mise à jour jusqu'à ce que le thread d'arrière-plan soit terminé. – dhke