2011-04-06 3 views
3

J'utilise AsyncTask pour charger des bitmaps en arrière-plan. J'ai créé une classe Mybackground qui hérite de AsyncTask. Si je fais ce qui suit il fonctionne,Obtenir un ne peut pas rendre une redéfinition statique à une méthode non statique lorsque j'appelle AsyncTask <Void.exicute

new MyBackground().execute(); 

Mais quand je l'appelle ainsi,

MyBackground mBackground=new MyBackground(); 
mBackground.p1=1; 
mBackground.p2="tets"; 
MyBackground.execute(); 

je reçois l'erreur ne peut pas faire une refrence statique à un non statique. Pourquoi cette erreur se produit-elle? Y a-t-il un moyen de faire cela? Si ce n'est pas ce qui serait un bon moyen de passer en 2 arguments différents, puisque l'exécution ne prend que 1 paramètre?

Répondre

4

Vous appelez mBackground.execute() qui appelle la méthode execute d'une instance particulière de votre classe MyBackground. L'appel new MyBackground().execute() crée une nouvelle instance MyBackground, puis les appels s'exécutent, ce qui explique pourquoi vous n'obtenez pas l'erreur.

Jetez un oeil à Java: static and instance methods si vous ne savez pas quelle est la différence entre une méthode statique et une instance.

Les méthodes statiques ne nécessitent pas l'existence d'une instance de ce type et les propriétés statiques sont partagées entre toutes les instances d'une classe.

2

Si vous voulez transmettre des données dans votre AsyncTask vous pouvez créer un nouveau constructeur pour elle:

public class MyBackground extends AsyncTask<Void, Void, Void> { 
    ... 
    private int p1; 
    private String p2; 

    public MyBackground(int p1, String p2) { 
     this.p1 = p1; 
     this.p2 = p2; 
    } 
    ... 
} 

Vous pouvez ensuite utiliser soit:

MyBackground myBackground = new MyBackground(1,"tets"); 
myBackground.execute(); 
// or 
MyBackground myBackground = new MyBackground(1,"tets").execute(); 

Joseph Earl a une bonne explication de pourquoi vous obtenez l'erreur de référence statique.

+0

Salut, Merci, une solution si simple –

Questions connexes