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:

 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?

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, …..)

  • Pregunta de actividad (principiante)
  • JNI / Android: llamada a un método no estático en Java desde C ++?
  • ¿Qué es la lógica detrás de super.method o después de super.method en android?
  • Mostrar tostadas desde dentro del método estático en Android
  • Comunicación entre BroadcastReceiver y Activity - android
  • Llamar un método de actividad de BroadcastReceiver en Android
  • Anotación Java ejecuta un método dentro de la declaración de anotación (uso para android)
  • ¿Cómo obtener un método llamado con diferentes parámetros?
  • ¿Qué es un evento de presionar las mejillas?
  • Android: Llame a super () al principio o al final de onStart (), onStop (), onDestroy () en actividad?
  • Método recursivo funciona en java con consola, pero no con android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.