726
Rozdział 17.
Metoda doInBackground()
Metoda doInBackground()
Metoda
doInBackground()
jest wywoływana i wykonywana w tle, bezpośrednio
po zakończeniu realizacji metody
onPreExecute()
. Mamy możliwość
zdefiniowania, jakiego typu będą parametry tej metody i jakiego typu będzie
zwracany przez nią wynik.
My planujemy użyć metody
doInBackground()
do wykonania kodu operującego
na bazie danych. Dzięki temu operacje na bazie zostaną wykonane w wątku
działającym w tle. Do tej metody przekażemy identyfikator aktualizowanego
napoju, a ponieważ identyfikator jest liczbą całkowitą, musimy zaznaczyć, że
doInBackground()
jest metodą pobierającą obiekty typu
Integer
. Poza tym
zwrócimy z niej wynik typu
Boolean
, dzięki czemu będziemy wiedzieć, czy kod
został wykonany prawidłowo, czy nie.
private class UpdateDrinkTask extends AsyncTask<Integer, Progress, Boolean> {
private ContentValues drinkValues;
...
protected Boolean doInBackground(Integer... drinks) {
int drinkId = drinks[0];
SQLiteOpenHelper coffeinaDatabaseHelper =
new CoffeinaDatabaseHelper(DrinkActivity.this);
try {
SQLiteDatabase db = coffeinaDatabaseHelper.getWritableDatabase();
db.update(“DRINK”, drinkValues,
“_id = ?”, new String[] {Integer.toString(drinkId)});
db.close();
return true;
} catch(SQLiteException e) {
return false;
}
}
...
}
onPreExecute()
doInBackground()
Ten kod zostanie wykonany w wątku
działającym w tle.
Zmieniamy ten parametr na Integer,
aby odpowiadał parametrowi metody
doInBackground().
Zmieniamy ten parametr na
Boolean, aby odpowiadał typowi
zwracanemu przez metodę
doInBackground().
To jest tablica liczb typu Integer, choć
my będziemy w niej zapisywać tylko
jedną informację — identyfikator napoju.
Metoda update() używa obiektu
drinkValues utworzonego w metodzie
onPreExecute().
Teraz zajmiemy się metodą
onProgressUpdate()
.
Get Android Programowanie aplikacji. Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.