Вызовите глобальную переменную, прежде чем она будет установлена ​​с помощью AsyncTask - PullRequest
1 голос
/ 26 марта 2011

Хорошо, это меня снова смутило.Я пытаюсь либо A: установить переменную golbal, что я могу сделать, либо B: извлечь переменную из моего AsyncTask.Я установил, можно установить переменную golbal из asynctask, что нормально, но действие вызывает ее до того, как она будет установлена ​​с помощью asynctask.

Поэтому мне нужно приложение, чтобы завершить AsyncTask перед вызовом переменной golbal.1004 *

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 голосов
/ 26 марта 2011

Два выпуска:

  • В Java нет глобальных переменных. Наиболее близкими являются статические переменные класса. Поскольку вы не показали объявленную вами переменную, я не могу сказать, что вы действительно реализовали.
  • Каждый AsyncTask имеет метод onPostExecute (..), который вы можете переопределить, который выполняется в исходном потоке / лупере после завершения doInBackground (..). Переопределите это, чтобы выполнить такие вещи, как Обновление потока пользовательского интерфейса.
0 голосов
/ 26 марта 2011

Работа с вашей глобальной переменной в onPostExecute методе вашего AsyncTask.Вы должны реализовать это в вашем AsyncTask ребенке.Этот метод вызывается, тогда вся работа выполнена.

РЕДАКТИРОВАТЬ

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

    ProgressDialog dialog;

    @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 = ProgressDialog.show(MainActivity.this, "", "Creating User...", true);
        dialog.show();
    }

    protected void onPostExecute(Boolean result) {
        dialog.dismiss();
        Toast.makeText(
            getApplicationContext(), 
            result?"Success":"User already exists!", 
            Toast.LENGTH_SHORT).show();
        MyProperties.getInstance().valut = result
        Log.i("res", Boolean.toString(MyProperties.getInstance().valut));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...