Como usar o SQLite DB a partir de AsyncTask?
-
27-09-2019 - |
Pergunta
Estou usando a minha Atividade de classe para acessar o meu DB, que fez o meu programa de congelar, por vezes,.
Então eu decidi usar AsyncTask, em vez disso, para lidar com o DB.
O meu problema é que eu não sei como instanciar minha SQLite DB "TheDB" da classe AsyncTask
public class myClass extends AsyncTask<Void, Void, Void>{
private TheDB db;
any method() {
this.db = new TheDB(this); //<-- Error here
}
isso funcionou bem na Atividade de classe, mas não sei como usá-la aqui
TheDB do construtor é TheDB(context Contexto), mas esta classe não é um "contexto" então como eu posso usar o meu DB aqui?
por favor, forneça exemplos, se você pode
e, por favor, não me dão links para o google com as referências, sou um novato e eu encontrá-los difíceis de seguir
Solução
Você precisa passar no contexto do aplicativo aqui
this.db = new TheDB(getApplicationContext());
Outras dicas
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();
}
}
Há duas maneiras que vejo:
Passe um objeto de contexto para o seu construtor assíncrono e instancie um banco de dados como este este.db = new thedb (contexto);
Ou você provavelmente pode passar no objeto de banco de dados real para o construtor, mas a primeira abordagem parece melhor.
Uma parte importante de aprender a programar é aprender a ler e a entender a documentação.Como documentação vai, o Android do google docs são bastante detalhadas, assim, a sua realmente vale o seu tempo para entender como eles funcionam.
Como você pode ver na AsyncTask docs, não há onCreate
ou onExecute
método um AsyncTask
.
O docs claramente percorrer as 4 principais funções de um AsyncTask, onPreExecute()
, doInBackground(Params...)
, onProgressUpdate(Progress...)
, onPostExecute(Result)
.
A probabilidade de escolhas para a sua instância são onPreExecute()
ou doInBackground(Params...)
.A diferença é se você quer ou não que o initializition para ocorrer no thread da INTERFACE do usuário.Se não, em seguida, fazê-lo em doInBackground(Params...)
.