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.
- ¿Cómo puedo convertir una parte del archivo de código fuente de Java a Kotlin?
- Android Equivalente a un UserControl .NET
- Html.ImageGetter TextView
- ¿Por qué IntentReceiverLeaked?
- Buscar punto de intersección de tres círculos programáticamente
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)); } } }
- Android no puede analizar cadena hasta la fecha
- Ocultar el teclado después de que un usuario termine una consulta en un SearchView
- CursorIndexOutOfBoundsException en android
- pase simple java array a primitivo c-array swig
- Cambiar la orientación del dispositivo se bloquea Actividad al utilizar AutoCompleteTextView y CursorAdapter
- ¿Cómo pasar de managedQuery a LoaderManager / CursorLoader?
- ¿Compartir un proyecto Android + Eclipse a través de SVN?
- Cómo analizar las matrices json anidadas en un solo objeto en android
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 usandomActivity
en el ejemplo de abajo) Alternativamente, suApplicationContext
(use una convención de nomenclatura apropiada, elA
necesita ser en minúsculas) es realmente una instancia deMainActivity
que está bien para ir, así que hagaApplicationContext.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.
- No se puede reiniciar el cargador después de cambiar la orientación
- LayoutManager para RecyclerView Grid con diferente ancho de celda