“Pas de enfermant instance de type” erreur lors de l'appel de méthode à partir d'une autre classe dans Android
Collègues, j'ai l'telle question:
1. Dans mon premier cours, j'ai le
public class parseYouTubeAndYahoo extends AsyncTask<String, Void, List<VideoDataDescription>>
pour analyser des données à partir d'internet. Mais j'ai besoin d'appeler la méthode execute() de cette classe d'une autre classe. Tout en essayant de droite d'un tel code:
new MainActivity.parseYouTubeAndYahoo().execute("someURL");
J'ai le message d'erreur suivant à partir de l'Éclipse
Aucun enfermant instance de type MainActivity est accessible. Doivent être admissibles à l'allocation avec un enfermant instance de type MainActivity (par exemple x.new A() où x est une instance de MainActivity).
et vraiment ce problème est dans le brouillard pour moi. Alors, comment appeler cette méthode d'une autre classe?
Vous devez vous connecter pour publier un commentaire.
En termes de l'erreur ici, si
parseYouTubeAndYahoo
classe est un non-statique à l'intérieur de la classe à l'intérieur de votre Activité, alors vous avez besoin d'une instance de la classe englobante afin d'instancier l'intérieur de la classe. Ainsi, vous aurez besoin de:Cependant....
Vous ne devriez vraiment pas être l'instanciation de non-statique à l'intérieur des classes de vos Activités à partir de l'extérieur de la
Activity
parce que, pour instancier un non-statique innner classe, vous avez fait à créer une instance de la classe englobante, qui, dans ce cas, est l'Activité. Les activités sont destinées à être commencé, non instancié vianew
. Si vous avez unAsyncTask
que vous souhaitez utiliser dans des endroits différents, puis créer un nouveau haut-niveau de la classe qui étend la classe deAsyncTask
.(Pour un exemple de création réutilisables
AsyncTasks
, voir: https://github.com/levinotik/ReusableAsyncTask)Notez que la syntaxe que vous avez essayé d'utiliser si vous avez besoin de saisir un statique classe imbriquée. C'est parce que dans un tel cas, l'extérieur de la classe est vraiment tout simplement agir comme un espace de noms, mais la classe imbriquée, parce que sa statique, n'a pas réellement besoin d'une référence à une instance de l'extérieur de la classe. Donc:
est la syntaxe correcte pour obtenir une instance d'un statique classe imbriquée.
Je suppose que votre
parseYouTubeAndYahoo
classe est un intérieur de classe en classeMainActivity
, en Java, vous devez instaniate un objet de l'intérieur de la classe parnew MainActivity().new parseYouTubeAndYahoo()
, donc appeler cette méthode comme cecinew MainActivity().new parseYouTubeAndYahoo().execute("someURL");
Je pense que
MainActivity
étend leActivity
classe, donc je pense que la réponse devrait êtrethis.new parseYouTubeAndYahoo().execute("someURL");
lorsque vous appelez cette méthode à l'intérieur de votreMainActivity
classe.Il serait plus facile de placer AsuncTask dans un autre fichier comme un separete classe.
Mais si vous voulez vraiment avoir, c'est un intérieur de classe, alors il doit être statique ou vous avez besoin pour obtenir une référence à son parent de la classe de première, ce qui pourrait être fait de cette manière:
dans le onCreate de MainActivity:
Nouvelle méthode dans MainActivity:
Puis dans une autre activité, vous pouvez obtenir de l'instance et d'accéder à ses méthodes publiques
Puis
De référence le cadre de l'activité à d'autres classe et de l'utiliser.
Comme ça: public oneofconstructer(Contexte ctx .....)