直到onClick方法结束才显示Android进度对话框

时间:2017-02-07 10:09:16

标签: android onclick dialog progressdialog progress

单击登录按钮时,我正在尝试显示进度对话框。但只有当我到达方法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();
        }

提前多多感谢

纳丁

4 个答案:

答案 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

现在它的工作非常好。

感谢您的帮助。 =)