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

  • Método recursivo funciona en java con consola, pero no con android
  • OnActivityResult sólo se reconoce como variable
  • Cómo resolver este error "com.android.internal.telephony no se puede resolver a un tipo" en android
  • Problemas con el teclado Android popupCharacters
  • Cómo reemplazar el método a través del atajo de teclado en Android Studio
  • Pregunta de actividad (principiante)
  • ¿Cómo puedo pasar una función como un parámetro a otra función en android?
  • ¿Cómo retraso un método en un bucle for en java?
  • Android: Llame a super () al principio o al final de onStart (), onStop (), onDestroy () en actividad?
  • La mejor manera de almacenar SparseBooleanArray en Bundle?
  • Android: ¿Cómo puedo pasar parámetros a OnPreExecute () de AsyncTask?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.