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



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

我只能用吐司来做:

@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里面,但没有成功。

有什么建议吗?谢谢!

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

1(

  • 更改方法"isValidUser"以接受失败 回调,成功回调 在上面的代码中,如果"isValidUser">
    true意味着它转到if块,否则它转到其他 块。
    所以使如果它是真的意味着然后去成功电话 否则返回将转到失败回调。 在调用
    "isValidUser"之前,进度条会星标并需要在 成功/失败回调

我假设globalVariable是验证用户的活动。我建议将globalVariable变成一个实用程序java类,而不是一个带有上下文的活动。你可以让你的活动/类实现一个接口,该接口将具有你将在应用程序中任何地方使用的常用方法,例如显示对话框、Toast 等。让我们创建一个名为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
}
}
}

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

最新更新