繁体   English   中英

显示不确定的进度指示器

[英]show indeterminate progress indicator

我尝试通过截击进行网络请求时显示进度指示器。 我收到错误消息“只有创建视图层次结构的原始线程才能触摸其视图”。 我无法弄清楚如何将hideProgressDialog()与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 handler = new Handler()onCreate()方法的构造函数中声明Handler 2)然后在您的parseNetworkResponse()方法中调用

handler.post(new Runnable() {
           @Override
           // this will run on the main thread.
           public void run() {
               hideProgressDialog();
           }
      });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM