Android-执行其他课程的任务时显示进度对话框

时间:2018-10-11 10:22:02

标签: android progressdialog

我正在尝试执行另一项活动的任务时显示ProgressDialog。我尝试了威胁,威胁和所有发现的东西,但没有任何帮助。

我只能做到用吐司来做

@Override
public void onClick(View view) {
user = new User(strLogin, strPwd);
if (globalVariable.getDB().isValidUser(user, globalVariable)) {
    Toast.makeText(context, "Login ok", Toast.LENGTH_LONG).show();
    globalVariable.setUserLogged(true);
    globalVariable.setUser(user);
    startActivity(new Intent(MainActivity.this, MainMenu.class));
} else {
    if(!globalVariable.getAuthorizedUser()) {
        Toast.makeText(context, "Login not allowed", Toast.LENGTH_LONG).show();
    }
    else {
        Toast.makeText(context, "Login failed", Toast.LENGTH_LONG).show();
    }
}
}

我要显示的是ProgressDialog而不是Toasts

问题似乎在于方法isValidUser在另一个活动中,因此直到任务结束才显示对话框。

我再说一遍,我曾尝试将其放入runOnUiThread,但没有窍门。

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

我的建议是尝试以下方法。

1)

  • 更改方法“ isValidUser”以接受失败 回调,成功回调在上面的代码中,如果“ isValidUser”
    如果为true,则转到if块,否则转到else 块。
    因此将其设为true则表示成功呼叫 否则返回失败回调。打电话之前
    “ isValidUser”在进度栏上加星标,需要在 成功/失败回调

答案 1 :(得分:0)

我假设globalVariable是验证用户的活动。我建议使globalVariable成为实用程序Java类,而不是具有上下文的活动。您可以让您的活动/类实现一个接口,该接口将具有可在您的应用中的任何地方使用的通用方法,例如显示对话框,敬酒等。让我们创建一个名为BaseBehavior的示例。

public interface BaseBehavior {
  void showProgress();
  void hideProgress();
}

globalVariable实现上述接口

public class GlobalVariable extends Activity implements BaseBehavior{
    @Override
    public void showProgress(){
      // implement code to reveal progress dialog
    }

    @Override
    public void hideProgress(){
      // implement code to hide progress dialog
    }
}

现在在您的代码中,所有实现该行为的类都可以直接调用globalvariable.showProgress()。我们也可以有一个实现BaseBehavior及其方法的ParentActivity,我们可以在任何地方调用它。

另一种选择是对globalVariable类使用AsyncTask。

public class GlobalVariable extends Activity {

// code

public void start(){
    new AsyncTaskRunner.execute()
}

private class AsyncTaskRunner extends AsyncTask<User, String, String> {

            private String resp;
            ProgressDialog progressDialog;

            @Override
            protected String doInBackground(User... users) {
               // validateUser(user[0]);
            }


            @Override
            protected void onPostExecute(String result) {
                // showProgressDialog();
            }


            @Override
            protected void onPreExecute() {
                // hideProgressDialog();
            }


            @Override
            protected void onProgressUpdate(String... text) {
                // End sequence

            }
    }
}

我希望这些选项可以帮助您实现所需的目标。 :)