Domanda

Ho usato la mia classe di attività di accedere al mio DB che ha reso il mio programma di congelamento a volte.

Così ho deciso di utilizzare AsyncTask invece di gestire il DB.

Il mio problema è che non so come creare un'istanza mia SQLite DB "TheDB" dalla classe di AsyncTask

public class myClass extends AsyncTask<Void, Void, Void>{
private TheDB db;

any method() {
    this.db = new TheDB(this);  //<-- Error here
}

questa bella lavorato alla Classe di attività, ma non so come usarlo qui

il costruttore di TheDB è TheDB (contesto Context), ma questa classe non è un "contesto" Così come posso utilizzare il mio DB qui?

si prega di fornire esempi, se possibile

e vi prego di non darmi link a google di riferimenti, Sono un novizio e li trovo difficile da seguire

È stato utile?

Soluzione

è necessario passare il contesto dell'applicazione qui

this.db = new TheDB(getApplicationContext());

Altri suggerimenti

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(); 
    }
}

Ci sono due modi che vedo:

  1. passare un oggetto contesto al costruttore AsyncTask, base di dati quindi un'istanza di come questo this.db = nuova TheDB (contesto);

  2. In alternativa, è probabilmente possibile passare l'oggetto database effettivo al costruttore, ma il primo approccio sembra migliore.

Una parte importante di imparare a programmare è imparare a leggere e capire la documentazione. Come documentazione va, la documentazione Android sono abbastanza dettagliati, quindi la sua davvero la pena il vostro tempo per capire come funzionano.

Come si può vedere nel AsyncTask docs , non c'è è onCreate o onExecute metodo in un AsyncTask.

La documentazione chiaramente a piedi attraverso le 4 funzioni principali di un AsyncTask, onPreExecute(), doInBackground(Params...), onProgressUpdate(Progress...), onPostExecute(Result).

Le scelte probabili per l'istanza sono onPreExecute() o doInBackground(Params...). La differenza è se si desidera o meno l'initializition si verifichi sul thread dell'interfaccia utente. Se non lo fai, allora farlo in doInBackground(Params...).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top