单击登录按钮时,我正在尝试显示进度对话框。但只有当我到达方法onClick结束时才会显示进度对话框。而不是一个开始。 在signIn方法中,我做了一个asynctask来到达服务器。 因此,asynctask始终占用所有时间,没有显示进度对话框。只有当到达onClick方法的末尾时,才会显示进度对话框.... 有人知道我做错了什么?
public void onClick(View view) {
progressDialog = new ProgressDialog(SignIn.this);
progressDialog.setMessage("Sign in in progress");
progressDialog.setTitle("Please wait");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
repSignIn = signIn(SignIn.this, etEmail.getText().toString(), etPassword.getText().toString());
if(!repSignIn.hasError())
{
Toast.makeText(getApplicationContext(), "Sign In successfully", Toast.LENGTH_SHORT).show();
onBackPressed();
}
else
{
Toast.makeText(getApplicationContext(), repSignIn.getErrorMessage(), Toast.LENGTH_SHORT).show();
}
//progressDialog.cancel();
}
提前多多感谢
纳丁
答案 0 :(得分:0)
您需要将progressDialog
放在onPreExecute
的{{1}}中,而不是AsyncTask
中的onPostExecute
。
原因是AsyncTask
使用了一个异步的工作线程,这就是progressDialog
在预期之前完成的原因。
class MyAsyncTask extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// do your stuff
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
progressDialog.dismiss();
}
}
答案 1 :(得分:0)
在异步任务覆盖onPreExecute()方法中,你必须显示进度条..
private void signIn(your parameters here) {
new AsyncTask<Void, Void, Void>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(SignIn.this);
progressDialog.setMessage("Sign in in progress");
progressDialog.setTitle("Please wait");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected void doInBackground(Void... params) {
//your logic here
}
@Override
protected void onPostExecute(JSONObject response) {
super.onPostExecute(response);
progressDialog.dismiss();
}
}.execute();
}
HOpe这有帮助
答案 2 :(得分:0)
在Asyntask中使用你的进度dailog。在onPreExecute中初始化并启动对话框并在onPostExecute中关闭对话框。 为我工作,
--jar
答案 3 :(得分:0)
我已更改我的代码
String result = new sendDataToServer().execute(url, "PUT", jsonData.toString()).get();
通过这样做:
https://gist.github.com/cesarferreira/ef70baa8d64f9753b4da
现在它的工作非常好。
感谢您的帮助。 =)