Question

Je me sers de ma classe d'activité pour accéder à mon DB qui a rendu mon gel du programme parfois.

Je décide donc d'utiliser AsyncTask au lieu de gérer la base de données.

Mon problème est que je ne sais pas comment instancier mon SQLite DB « labase » de la classe de AsyncTask

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

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

ce beau travaillé sur la classe d'activité, mais je ne sais pas comment l'utiliser ici

constructeur de labase est labase (contexte de contexte), mais cette classe n'est pas un « contexte » alors comment puis-je utiliser mon DB ici?

S'il vous plaît fournir des exemples si vous pouvez

et s'il vous plaît ne me donne pas liens à Google références, je suis un débutant et je les trouve difficile à suivre

Était-ce utile?

La solution

vous devez passer le contexte d'application ici

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

Autres conseils

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

Il y a deux façons que je vois:

  1. Passez un objet de contexte à votre constructeur AsyncTask, puis la base de données instancier comme ce this.db = new labase (contexte);

  2. Ou vous pouvez probablement passer l'objet de base de données réelle au constructeur, mais la première approche semble mieux.

Une partie importante de l'apprentissage au programme est d'apprendre à lire et à comprendre la documentation. Comme la documentation va, les docs Android sont assez détaillés, donc sa vaut vraiment la peine le temps de comprendre comment ils fonctionnent.

Comme vous pouvez le voir dans le AsyncTask docs , il n'y a pas procédé de onCreate ou onExecute dans un AsyncTask.

Les documents que vous marcher clairement à travers les 4 fonctions principales d'un AsyncTask, onPreExecute(), doInBackground(Params...), onProgressUpdate(Progress...), onPostExecute(Result).

Les choix probables pour votre instance sont onPreExecute() ou doInBackground(Params...). La différence est de savoir si vous voulez ou non initializition de se produire sur le thread d'interface utilisateur. Si vous ne le faites pas, alors faites-le dans doInBackground(Params...).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top