سؤال

أحاول إظهار مؤشر التقدم عند القيام بطلبات الشبكة باستخدام الكرة الطائرة.تظهر لي رسالة الخطأ "فقط سلسلة المحادثات الأصلية التي تنشئ تسلسلاً هرميًا للعرض هي التي يمكنها لمس طرق العرض الخاصة بها".لا أستطيع معرفة كيفية وضع إخفاء 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();
           }
      });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top