إظهار مؤشر التقدم غير المحدد
-
21-12-2019 - |
سؤال
أحاول إظهار مؤشر التقدم عند القيام بطلبات الشبكة باستخدام الكرة الطائرة.تظهر لي رسالة الخطأ "فقط سلسلة المحادثات الأصلية التي تنشئ تسلسلاً هرميًا للعرض هي التي يمكنها لمس طرق العرض الخاصة بها".لا أستطيع معرفة كيفية وضع إخفاء ProgressDialog() الخاص بي على نفس مؤشر الترابط الخاص بـ showProgressDialog().هذا هو الكود الخاص بي...
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();}
};
}
حل
بفضل tautvydas.انتهى بي الأمر بوضع هذه الأساليب في صفي الأساسي.
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();
}
});
}
}
المحلول
إنشاء Handler
وتمرير أ Runnable
لذلك لتشغيل على الموضوع الرئيسي.
1) أعلن Handler
في المنشئ على onCreate()
الطريقة بواسطة Handler handler = new Handler()
.2) ثم في الخاص بك parseNetworkResponse()
استدعاء الطريقة
handler.post(new Runnable() {
@Override
// this will run on the main thread.
public void run() {
hideProgressDialog();
}
});
لا تنتمي إلى StackOverflow