montrer indéterminée indicateur de progrès
-
21-12-2019 - |
Question
Je suis en train d'afficher un indicateur de progression lorsque vous faites des demandes de réseau avec le volley.J'obtiens l'erreur "Seul le thread d'origine que de créer une vue de la hiérarchie peut toucher son point de vue".Je ne peux pas comprendre comment obtenir mon hideProgressDialog() sur le même thread que showProgressDialog().Voici mon code...
showProgressDialog("Logging you in");
String url = ApplicationController.getInstance().getBaseURL() + "Customer/LoginCustomer";
JsonRequest<String> jr = new JsonRequest<String>(Method.POST, url, jo.toString(), this.createSuccessListener(),
this.createErrorListener()) {
@Override
protected Response<String> parseNetworkResponse(NetworkResponse nr) {
hideProgressDialog();
try {
String str = new String(nr.data, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
};
ApplicationController.getInstance().addToRequestQueue(jr);
}
/** Create Volley Listeners **/
private Response.ErrorListener createErrorListener() {
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
hideProgressDialog();
}
};
}
private Response.Listener<String> createSuccessListener() {
return new Response.Listener<String>() {
@Override
public void onResponse(String response) {
hideProgressDialog();}
};
}
Solution
Grâce à tautvydas.J'ai fini par mettre ces méthodes dans ma classe de base.
protected void showProgressDialog(String message) {
if(mHandler == null){
mHandler = new Handler();
}
if (mDialog == null || !mDialog.isShowing()) {
mDialog = new ProgressDialog(getActivity());
mDialog.setMessage(message);
mDialog.setCancelable(false);
mDialog.setIndeterminate(true);
mDialog.show();
}
}
protected void hideProgressDialog() {
if (mDialog != null) {
mHandler.post(new Runnable() {
@Override
// this will run on the main thread.
public void run() {
mDialog.hide();
}
});
}
}
La solution
Créer un Handler
et passer un Runnable
pour qu'il fonctionne sur le thread principal.
1) Déclarer Handler
dans le constructeur onCreate()
méthode par Handler handler = new Handler()
.2) Puis dans votre parseNetworkResponse()
appel de la méthode
handler.post(new Runnable() {
@Override
// this will run on the main thread.
public void run() {
hideProgressDialog();
}
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow