public class checkSchoolCodeQuery extends AsyncTask<String, Integer, String> {
EditText etSchoolCode = (EditText) findViewById(R.id.etSchoolCode);
String schoolcode = etSchoolCode.getText().toString();
String isValid = "didn run";
@Override
protected String doInBackground(String... params) {
final ParseQuery<ParseObject> query = ParseQuery.getQuery("Schools");
query.whereEqualTo("schoolcode", schoolcode);
query.countInBackground(new CountCallback() {
@Override
public void done(int i, ParseException e) {
if (e == null) {
if (i == 1) {
// Check if expiry date is greater than today's date
query.getFirstInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject parseObject, ParseException e) {
if (e == null) {
Date expiryDate = parseObject.getDate("expirydate");
Date todaysDate = new Date();
System.out.println(expiryDate);
if (expiryDate.after(todaysDate)) {
isValid = "true";
} else {
isValid = "false";
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getApplicationContext())
.setMessage("Your school doesnt have access");
}
} else {
System.out.println("There was an error when checking if School Code was valid");
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getApplicationContext())
.setMessage("There was an error when checking if School Code was valid");
AlertDialog alertDialog = alertDialogBuilder.show();
isValid = "didnt run";
}
}
});
} else {
isValid = "false";
// Create Alert Dialog to show error text
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getApplicationContext())
.setMessage("The School Code is invalid");
AlertDialog alertDialog = alertDialogBuilder.show();
}
} else {
isValid = "didnt run";
System.out.println("There was an error when checking if School Code was valid");
// Create Alert Dialog to show error text
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getApplicationContext())
.setMessage("There was an error when checking if School Code was valid");
AlertDialog alertDialog = alertDialogBuilder.show();
}
}
});
return isValid;
}
@Override
protected void onPostExecute(String aString) {
if (aString == "true") {
System.out.println("The school code is valid");
} else if (aString == "false") {
System.out.println("The school coe is invalid");
}
else {
System.out.println("There was an error");
}
}
}
Когда я запускаю мой код, переменная isValid
не обновляется, поэтому он использует начальное значение isValid
строки. Исправляю ли я AsyncTask
или я что-то пропустил? Как сделать обновление переменной в AsyncTask
? Пожалуйста, помогите, поскольку я начинаю программировать. Я проверил другие вопросы, но они не относятся к моему делу; все они являются расширенными сценариями, и я не понимаю их код. Я просто ищу простую проблему с моей проблемой.Переменная не обновляется в AsyncTask, когда я запускаю его
Пожалуйста, используйте enum для определения вашего состояния, используя строку для определения вашего состояния - это плохой код !!, во-вторых, используйте TextUtils.equals (a, b) для сравнения двух строк. – dex
Он по-прежнему дает мне тот же результат, сравнивая строки, это не моя проблема, проблема в том, что переменные не обновляются в asynctask – user3147316
приложите отладчик, проверьте, действительно ли ваш код его ударил или нет, а затем обновите строка. – dex