Error de "no incluir instancia de tipo" al llamar al método de otra clase en Android
Colegas, tengo la pregunta: 1. En mi primera clase tengo la
public class parseYouTubeAndYahoo extends AsyncTask<String, Void, List<VideoDataDescription>>
Para analizar datos de Internet. Pero necesito llamar al método execute () de esta clase de otra clase. Al intentar corregir dicho código:
- No se puede reemplazar el método onPostExecute () en AsyncTask Class o obtenerlo para activar
- Android: método vibrador (si el teléfono no tiene vibrador?)
- Anotación Java ejecuta un método dentro de la declaración de anotación (uso para android)
- Cómo invocar el método de una clase CCColorLayer de otro método de clase (se extiende Actividad), Android?
- Llame a un método de actividad de un BroadcastReceiver. ¿Es posible?
new MainActivity.parseYouTubeAndYahoo().execute("someURL");
Tengo el siguiente mensaje de error de Eclipse
No se puede acceder a ninguna instancia de inclusión del tipo MainActivity. Debe calificar la asignación con una instancia de inclusión del tipo MainActivity (egxnew A () donde x es una instancia de MainActivity).
Y realmente este problema está envuelto en la niebla para mí. Entonces, ¿cómo llamar a este método de otra clase?
- Eclipse Content Assist no funciona con Android
- ¿Restablecer SharedPreferences?
- ¿Qué es un evento de presionar las mejillas?
- Teclado Android: no inicializa el cliente de búfer compartido porque token = -12
- Cómo llamar al método con el parámetro Ver en Android Studio
- Mostrar tostadas desde dentro del método estático en Android
- Comunicación entre BroadcastReceiver y Activity - android
- Android infla la vista utilizando un objeto de vista existente
En términos del error real aquí, si la clase parseYouTubeAndYahoo
es una clase interna no estática dentro de tu Actividad, necesitas una instancia de la clase enclosing para instanciar la clase interna. Por lo tanto, necesitará:
MainActivity myActivity = new MainActivity(); MainActivity.parseYouTubeAndYahoo asyncTask = myActivity.new parseYouTubeAndYahoo();
Sin embargo….
Realmente no deberías instanciar las clases internas no estáticas de tus Actividades desde fuera de la Activity
porque para instanciar una clase no estática, debes instanciar realmente la clase inclusiva, que en este caso es la Actividad . Las actividades están destinadas a ser iniciado, no instanciado a través de new
. Si tiene un AsyncTask
que desea utilizar en diferentes lugares, cree una nueva clase de nivel superior que se extienda desde AsyncTask
.
(Para ver un ejemplo de creación de AsyncTasks
reutilizables, consulte: https://github.com/levinotik/ReusableAsyncTask )
Tenga en cuenta que la sintaxis que ha intentado utilizar funcionaría si necesita agarrar una clase anidada estática . Esto se debe a que en tal caso, la clase externa es realmente sólo actuando como un espacio de nombres, pero la clase anidada, porque su estática, en realidad no necesita una referencia a una instancia de la clase externa. Así:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
Es la sintaxis adecuada para obtener una instancia de una clase anidada estática .
Supongo que su clase parseYouTubeAndYahoo
es una clase interna en la clase MainActivity
, en Java, debe instaniate un objeto de la clase interna por new MainActivity().new parseYouTubeAndYahoo()
, así que llame a ese método como este new MainActivity().new parseYouTubeAndYahoo().execute("someURL");
También supongo que MainActivity
extiende la clase Activity
, así que creo que la respuesta debería ser this.new parseYouTubeAndYahoo().execute("someURL");
Cuando acaba de llamar a este método dentro de su clase MainActivity
.
Sería más fácil simplemente colocar AsuncTask en otro archivo como una clase separete.
Pero si realmente quieres tener una clase interna, entonces o bien tiene que ser estática o necesitas obtener una referencia a su clase padre primero, lo que podría hacerse así:
En onCreate of MainActivity:
Static MainActivity activityInstance = getContext ();
Nuevo método en MainActivity:
public static MainActivity getActivityInstance(){ return activityInstance; }
Entonces en otra actividad puedes obtener la instancia y acceder a sus métodos públicos
MainActivity instanceOfMainActivity = MainActivity.getInstance ();
Entonces
New instanceOfMainActivity.parseYouTubeAndYahoo (). Execute ("someURL");
Referir el contexto de la actividad a otra clase y usarla.
Así: public oneofconstructer (Contexto ctx, …..)