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 finden
War es hilfreich?

Lö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:

  1. Führen Sie ein Kontextobjekt zu Ihrem AsyncTask Konstruktor, dann instantiate Datenbank wie diese this.db = new TheDB (Kontext);

  2. 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...).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top