KIO
Kreative Ideen online

Mit einem AsyncTask können Sie Vorgänge im Hintergrund ausführen. Wenn sie ausgeführt wurden, können Sie Ansichten im Hauptereignisthread aktualisieren. Wenn sich die Aufgabe wiederholt, können Sie sie sogar verwenden, um die Progess der Aufgabe zu veröffentlichen, während sie ausgeführt wird.

Sie erstellen eine AsyncTask, indem Sie die AsyncTask-Klasse erweitern und die doInBackground()-Methode implementieren. Der Code in dieser Methode wird in einem Backgorund-Thread ausgeführt, daher ist er der perfekte Ort, an dem Sie Datenbankcode platzieren können. Die AsyncTask-Klasse verfügt auch über eine onPreExecut()-Methode, die vor doInackground() ausgeführt wird, und eine onPostExecute()-Methode, die anschließend ausgeführt wird. Es gibt eine onProgessUpdat()-Methode, wenn Taskprogeress veröffentlicht werden muss.

Sie haben Ihre AsyncTask-Klasse als innere Klasse für die Aktivität ann, die sie verwenden muss
Private Klasse MyAsyncTask-Erweiterung<Params, progress,="" result=""></Params,> AsyncTask

   frei wählbar. Sie wird ausgeführt, bevor der Code, den Sie ausführen möchten, den Hintergrund aufschlüsselt.  
   geschützte void onPreExecute()"
     Code, der vor der Ausführung der Aufgabe ausgeführt werden soll
    }

   Sie müssen diese Methode implementieren. Es enthält den Code, den Sie im Hintergrund ausführen möchten.
   geschütztes Ergebnis doInBackground(Params ... params)
     Code, den Sie in einem Hintergrundthread ausführen möchten
   }

   frei wählbar. Sie können den im Hintergrund ausgeführten Code veröffentlichen.
   geschützte void onProgressUpdate(Fortschritt... Werte)
     Code, den Sie ausführen möchten, um den Fortschritt Ihrer Aufgabe zu veröffentlichen
   }

   frei wählbar. Es wird ausgeführt, nachdem der Code Runnin im Hintergrund beendet hat.
   geschütztvooid onPostExecute(Ergebnis)
      Code, den Sie ausführen möchten, wenn die Aufgabe abgeschlossen ist
   }
}

AsyncTask wird durch drei generische Parameter definiert: Params, Progress und Results.

  • Params ist der Objekttyp, der verwendet wird, um beliebige Taskparameter an die doInBackground()-Methode zu übergeben.
  • Fortschritt ist der Objekttyp, der verwendet wird, um den Vorgangsfortschritt anzuzeigen, und Ergebnis ist der Typ des Aufgabenergebnisses, das sie auf Leer setzen kann, wenn Sie sie nicht verwenden möchten.
  • Ergebnis
UpdateDrinkTask der privaten Klasse<Integer, void,boolean=""> </Integer,> erweitert AsyncTask
        private ContentValues drinkValues;

        geschützte void onPreExecute()"
            CheckBox favorit = (CheckBox) findViewById(R.id.favorite);
            drinkValues = neue ContentValues();
            drinkValues.put("FAVORITE",favorite.isChecked());
        }

        protected Boolean doInBackground(Integer... Getränke)
            int drinkId = drinks[0];
            SQLiteOpenHelper starbuzzDatabaseHelper = neuer StarbuzzDatabaseHelper(DrinkActivity.this);
            Versuch {
                SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
                db.update("DRINK",drinkValues,"_id = ?",new String[]'Integer.toString(drinkId)');
                db.close();
                Rückkehr Richtig ;
            • catch (SQLiteException e)
                Rückkehr Falsch ;
            }
        }
        geschützte void aufPostExecute(Boolean success)"
            if(!success)
                Toast toast = Toast.makeText(DrinkActivity.this,"Database unavailable", Toast.LENGTH_SHORT);
                toast.show();
            }
            Ansonsten {
                Toast toast = Toast.makeText(DrinkActivity.this,"Applied changes",Toast.LENGTH_SHORT);
                toast.show();
            }
        }
    }

Vollständiger Aktivitätscode für den Kontext:

Paket eu.kio.starbuzz;

importieren android.app.Activity;
importieren android.content.ContentValues;
importieren android.database.Cursor;
importieren sie android.database.sqlite.SQLiteDatabase;
importieren android.database.sqlite.SQLiteException;
importieren android.database.sqlite.SQLiteOpenHelper;
importieren android.os.AsyncTask;
importieren android.os.Bundle;
importieren android.view.View;
importieren android.widget.CheckBox;
importieren android.widget.TextView;
importieren android.widget.ImageView;
importieren android.widget.Toast;

Public Class DrinkActivity erweitert die Aktivität

    öffentliche statische endgültige Zeichenfolge EXTRA_DRINKID = "drinkId";

    @Override
    geschützte void onCreate(Bundle savedInstanceState)

    }

    Aktualisieren der Datenbank, wenn auf das Kontrollkästchen geklickt wird
    public void onFavoriteClicked(Ansichtsansicht)
        int drinkId = (Integer) getIntent().getExtras().get(EXTRA_DRINKID);
        neue UpdateDrinkTask().execute(drinkId);
    }

    Innere Klasse, um das Getränk zu aktualisieren.
    UpdateDrinkTask der privaten Klasse<Integer, void,boolean=""> </Integer,> erweitert AsyncTask
        private ContentValues drinkValues;

        geschützte void onPreExecute()"
            CheckBox favorit = (CheckBox) findViewById(R.id.favorite);
            drinkValues = neue ContentValues();
            drinkValues.put("FAVORITE",favorite.isChecked());
        }

        protected Boolean doInBackground(Integer... Getränke)
            int drinkId = drinks[0];
            SQLiteOpenHelper starbuzzDatabaseHelper = neuer StarbuzzDatabaseHelper(DrinkActivity.this);

            SQLiteOpenHelper starbuzzDatabaseHelper = neuer StarbuzzDatabaseHelper(DrinkActivity.this);

            Versuch {

                SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
                db.update("DRINK",drinkValues,"_id = ?",new String[]'Integer.toString(drinkId)');
                db.close();

                /*SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
                db.update("DRINK",drinkValues,"_id = ?", neue Zeichenfolge[]-Integer.toString(drinkId)");
                db.close();*/
                Rückkehr Richtig ;
            • catch (SQLiteException e)
                Rückkehr Falsch ;
            }
        }

        geschützte void aufPostExecute(Boolean success)"
            if(!success)
                Toast toast = Toast.makeText(DrinkActivity.this,"Database unavailable", Toast.LENGTH_SHORT);
                toast.show();
            }
            Ansonsten {
                Toast toast = Toast.makeText(DrinkActivity.this,"Applied changes",Toast.LENGTH_SHORT);
                toast.show();
            }
        }
    }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert