MainActivity.this no es una clase inclusiva AsyncTask

Estoy tratando de crear un AsyncTask por primera vez, pero no tengo mucha suerte.

Mi AsyncTask necesita obtener información de un servidor y luego agregar nuevos diseños a la distribución principal para mostrar esta información.

Todo parece ser más o menos claro, pero el mensaje de error "MainActivity no es una clase de inclusión" me está molestando.

Nadie más parece tener este problema, así que creo que extraño algo muy obvio, simplemente no sé qué es.

Además, no estoy seguro si he usado la forma correcta de obtener el contexto, y porque mi aplicación no compila, así que no puedo probarlo.

Su ayuda es muy apreciada.

Aquí está mi código:

public class BackgroundWorker extends AsyncTask<Context, String, ArrayList<Card>> { Context ApplicationContext; @Override protected ArrayList<Card> doInBackground(Context... contexts) { this.ApplicationContext = contexts[0];//Is it this right way to get the context? SomeClass someClass = new SomeClass(); return someClass.getCards(); } /** * Updates the GUI before the operation started */ @Override protected void onPreExecute() { super.onPreExecute(); } @Override /** * Updates the GUI after operation has been completed */ protected void onPostExecute(ArrayList<Card> cards) { super.onPostExecute(cards); int counter = 0; // Amount of "cards" can be different each time for (Card card : cards) { //Create new view LayoutInflater inflater = (LayoutInflater) ApplicationContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewSwitcher view = (ViewSwitcher)inflater.inflate(R.layout.card_layout, null); ImageButton imageButton = (ImageButton)view.findViewById(R.id.card_button_edit_nickname); /** * A lot of irrelevant operations here */ // I'm getting the error message below LinearLayout insertPoint = (LinearLayout)MainActivity.this.findViewById(R.id.main); insertPoint.addView(view, counter++, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); } } } 

Eclipse probablemente tiene razón, y está intentando acceder a una clase ( MainActivity ) que está dentro de su propio archivo de otra clase que está en su propio archivo ( BackgroundWorker ). No hay manera de hacer eso – ¿cómo se supone que una clase debe saber sobre la instancia del otro por arte de magia? Lo que puedes hacer:

  • Mover el AsyncTask por lo que es una clase interna en MainActivity
  • Transmitir su actividad a AsyncTask (a través de su constructor) y acceder a ella utilizando activityVariable.findViewById(); (Estoy usando mActivity en el ejemplo de abajo) Alternativamente, su ApplicationContext (use una convención de nomenclatura apropiada, el A necesita ser en minúsculas) es realmente una instancia de MainActivity que está bien para ir, así que haga ApplicationContext.findViewById();

Utilizando el ejemplo de Constructor:

 public class BackgroundWorker extends AsyncTask<Context, String, ArrayList<Card>> { Context ApplicationContext; Activity mActivity; public BackgroundWorker (Activity activity) { super(); mActivity = activity; } //rest of code... 

Como para

No estoy seguro si he utilizado la forma correcta de obtener el contexto

Está bien.

  • Vista previa de la web
  • Fuente Hindi con API de nivel 15 (también conocido como Android 4.0.2)
  • Android / Java - ¿Cómo crear una conexión HTTPS?
  • Wifi y 3G a la misma hora
  • Android Spinner dropDownHorizontalOffset no funciona pero dropDownVerticleOffest es
  • Implementación parcelable con ArrayList <objeto personalizado>
  • No se pueden agregar datos al mapa hash declarado dentro de una clase que no sea de actividad
  • Flujo de trabajo de desarrollo de aplicaciones Android más eficiente?
  • ¿Puede un Fragmento de Android superponer la actividad de PhoneGap?
  • ¿Cuál es la mejor manera de raspar este código HTML para una aplicación para Android?
  • Configuración del valor de propiedad Singleton en el Listado de Firebase
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.