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

Foi útil?

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:

  1. Passe um objeto de contexto para o seu construtor assíncrono e instancie um banco de dados como este este.db = new thedb (contexto);

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top