studio - onpreexecute method in android
Error "No adjuntar instancia de tipo" al llamar al método de otra clase en Android (4)
Colegas, tengo la siguiente pregunta: 1. En mi primera clase tengo el
public class parseYouTubeAndYahoo extends AsyncTask<String, Void, List<VideoDataDescription>>
para analizar datos de internet. Pero necesito llamar al método execute () de esta clase desde otra clase. Al intentar corregir ese código:
new MainActivity.parseYouTubeAndYahoo().execute("someURL");
Tengo el siguiente mensaje de error de Eclipse
No se puede acceder a ninguna instancia adjunta de tipo MainActivity. Debe calificar la asignación con una instancia adjunta de tipo MainActivity (por ejemplo, xnew A () donde x es una instancia de MainActivity).
y realmente este problema está envuelto en niebla para mí. Entonces, ¿cómo llamar a este método desde otra clase?
En términos del error real aquí, si la clase parseYouTubeAndYahoo
es una clase interna no estática dentro de su actividad, entonces necesita una instancia de la clase adjunta para crear una instancia de la clase interna. Entonces, necesitarás:
MainActivity myActivity = new MainActivity();
MainActivity.parseYouTubeAndYahoo asyncTask = myActivity.new parseYouTubeAndYahoo();
Sin embargo....
No debería crear instancias de clases internas no estáticas de sus actividades desde fuera de la Activity
porque para instanciar una clase innner no estática, debe crear una instancia real de la clase adjunta, que, en este caso, es la actividad . Las actividades están destinadas a ser iniciadas, no creadas a través de new
. Si tiene una AsyncTask
que le gustaría usar 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 necesitara obtener una clase anidada estática . Esto se debe a que en ese caso, la clase externa realmente solo está actuando como un espacio de nombres, pero la clase anidada, porque es 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 correcta para obtener una instancia de una clase anidada estática .
Referencia el contexto de la actividad a otra clase y úsala.
Así: public oneofconstruter (Context ctx, .....)
Sería más fácil simplemente colocar AsuncTask en otro archivo como una clase separada.
Pero si realmente desea tener es una clase interna, entonces o bien tiene que ser estático o necesita obtener una referencia a su clase principal primero, que se podría hacer así:
en onCreate of MainActivity:
static MainActivity activityInstance = getContext ();
Nuevo método en MainActivity:
public static MainActivity getActivityInstance(){
return activityInstance;
}
Luego, en otra actividad, puede obtener la instancia y acceder a sus métodos públicos
MainActivity instanceOfMainActivity = MainActivity.getInstance ();
Entonces
new instanceOfMainActivity.parseYouTubeAndYahoo (). execute ("someURL");
Supongo que tu clase parseYouTubeAndYahoo
es una clase interna en la clase MainActivity
, en Java, debes instaurar un objeto de la clase interna mediante la new MainActivity().new parseYouTubeAndYahoo()
, así que llama ese método como este new MainActivity().new parseYouTubeAndYahoo().execute("someURL");
También creo 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
.