Хорошо, это снова меня смутило. Я пытаюсь либо A: установить golbal-переменную, которую я могу сделать, либо B: вернуть переменную из моего AsyncTask
. Я установил, чтобы установить golbal-переменную из asynctask, которая является прекрасной, но действие вызывает ее до того, как она будет установлена с помощью asynctask.
Итак, поэтому мне нужно приложение для финализации AsyncTask, прежде чем вызвать golbal-переменную.
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));
}
}
}
Работайте с вашей глобальной переменной в 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));
}
}
Два вопроса: