Wie SQLite DB von AsyncTask zu benutzen?
-
27-09-2019 - |
Frage
Ich habe meine Aktivitätsklasse wurde mit meiner DB zuzugreifen, die manchmal mein Programm einfrieren gemacht.
entschieden Also ich AsyncTask zu verwenden, anstatt die DB zu behandeln.
Mein Problem ist, ich weiß nicht, wie meine SQLite DB „TheDB“ instanziiert von AsyncTask Klasse
public class myClass extends AsyncTask<Void, Void, Void>{
private TheDB db;
any method() {
this.db = new TheDB(this); //<-- Error here
}
das hat gut funktioniert auf der Aktivitätsklasse, aber es weiß ich nicht, wie es zu benutzen hier
TheDB Konstruktor ist TheDB (Context Kontext), aber diese Klasse ist kein "Kontext", so wie kann ich meine DB hier?
Sie Beispiele geben, wenn Sie können
und bitte geben Sie nicht ich Links Referenzen Google, ist ein Neuling und ich sie hart
folgen findenLösung
Sie müssen hier den Anwendungskontext zu übergeben
this.db = new TheDB(getApplicationContext());
Andere Tipps
import android.content.Context;
public class SuperTask extends AsyncTask<Void, Void, Void> {
private final Context mContext;
public SuperTask(Context context) {
super();
this.mContext = context
}
protected Void doInBackground(Void... params) {
// using this.mContext
}
}
public class MainActivity extends Activity {
// and run from Activity
public void onButtonClick(View view) {
new SuperTask(this.getApplicationContext()).execute();
}
}
Es gibt zwei Möglichkeiten, die ich sehe:
-
Führen Sie ein Kontextobjekt zu Ihrem AsyncTask Konstruktor, dann instantiate Datenbank wie diese this.db = new TheDB (Kontext);
-
Oder Sie wahrscheinlich das eigentliche Datenbankobjekt an den Konstruktor übergeben können, aber der erste Ansatz scheint besser.
Ein wichtiger Teil zum Programm Lernen lernt Dokumentation zu lesen und zu verstehen. Als Dokumentation geht, wird die Android docs ziemlich detailliert, so dass sie wirklich wert Ihre Zeit zu verstehen, wie sie funktionieren.
Wie Sie sehen können in der AsyncTask docs , gibt es keine onCreate
oder onExecute
Methode in einem AsyncTask
.
Die docs klar gehen Sie durch die 4 Hauptfunktionen eines AsyncTask, onPreExecute()
, doInBackground(Params...)
, onProgressUpdate(Progress...)
, onPostExecute(Result)
.
Die wahrscheinlichen Möglichkeiten für Ihre Instanz sind onPreExecute()
oder doInBackground(Params...)
. Der Unterschied ist, ob Sie die initializition auf dem UI-Thread ausgeführt werden sollen. Wenn Sie das nicht tun, dann tun Sie es in doInBackground(Params...)
.