在使用AsyncTask设置之前调用全局变量

时间:2011-03-26 17:27:57

标签: android android-asynctask

好的,这让我再次感到困惑。我正在尝试A:设置一个golbal变量,我可以做或B:从我的AsyncTask中提取一个变量。我已设置可以设置asynctask的golbal变量,这很好,但是活动在使用asynctask设置之前调用它。

因此,我需要应用程序在调用golbal变量之前完成AsyncTask。

new createUser().execute();                         
Log.i("res", "After: " + Boolean.toString(MyProperties.getInstance().valut));

private class createUser extends AsyncTask<Void, Void, Boolean> {

    ProgressDialog dialog = ProgressDialog.show(MainActivity.this, "",
            "Creating User...", true);
    Toast toast = Toast.makeText(getApplicationContext(), "",
            Toast.LENGTH_SHORT);

    @Override
    protected Boolean doInBackground(Void... params) {
        // TODO Auto-generated method stub

        if (db.createUser(nameU.getText().toString(), userU.getText()
                .toString(), emailU.getText().toString(), passU.getText()
                .toString()) == false) {
            return false;
        } else {
            return true;
        }
    }

    protected void onPreExecute() {
        dialog.show();
    }

    protected void onPostExecute(Boolean result) {
        dialog.dismiss();
        if (!result) {
            toast.setText("User already exists!");
            toast.show();
            res = result;
            MyProperties.getInstance().valut = res;
            Log.i("res", Boolean.toString(MyProperties.getInstance().valut));

        } else {
            toast.setText("Success");
            toast.show();
            res = result;
            MyProperties.getInstance().valut = res;
            Log.i("res", Boolean.toString(MyProperties.getInstance().valut));
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用onPostExecute的{​​{1}}方法处理全局变量。您需要在AsyncTask的孩子中实施它。调用此方法然后完成所有工作。

修改

AsyncTask

答案 1 :(得分:0)

两个问题:

  • Java实际上没有任何全局变量。它最接近的是静态类变量。由于你没有显示你声明的变量,我不能说你真正实现了什么。
  • 每个AsyncTask都有一个onPostExecute(..)方法,你可以覆盖在doInBackground(..)完成后在原始线程/ Looper中运行的方法。重写此操作以执行更新UI线程等操作。