[英]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.