No se puede acceder a "findViewById" en AsyncTask
Estoy utilizando una clase AsyncTask para descargar datos de un archivo php. Después de descargar, quiero poner estos datos, en TextViews diferentes, pero no puedo usar el método findViewById.
El problema, es que estoy haciendo esto por clases separadas, y todo dentro de un fragmento.
- Uso de espera en AsyncTask
- AsyncTask "Sólo el subproceso original que creó una jerarquía de vista puede tocar sus vistas."
- AsyncTask y setAdapter en métodos onCreate
- Patrón de Android AsyncTask / doInBackground
- Android, ¿puedo poner AsyncTask en una clase separada y tener una devolución de llamada?
Este es mi código:
public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{ private Context mContext; [...] public RecuperarComentarisFoto(Context context){ this.mContext=context; } @Override protected void onPreExecute() { [...] } @Override protected String doInBackground(String... arg0) { params.add(new BasicNameValuePair("pid", "1")); JSONObject json = jsonParser.makeHttpRequest(url_get_comentaris, "GET", params); JSONArray productObj; //HERE I RETRIEVE DATA FROM JSON. ITS WORKING OK. return null; }
Y donde tengo el problema:
@Override protected void onPostExecute(String result) { super.onPostExecute(result); this.pDialog.dismiss(); TextView comentariEditText = (TextView) findViewById(R.id.commentsMostrar); }
He intentado esto:
TextView comentariEditText = (TextView) mContext.findViewById(R.id.commentsMostrar);
Pero no está funcionando también.
Tenga en cuenta que estoy llamando a este AsyncTask de un fragmento. Como puede ver, tuve que pasar el contexto recuperado por getActivity () a la AsyncTask:
public class MyFragmentA extends Fragment { Context cont; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); cont=getActivity(); new RecuperarComentarisFoto(cont).execute(); return myFragmentView; } }
¿Que debería hacer?
Gracias.
- AsyncTask e IllegalArgumentException
- Async Task OnProgressUpdate CalledFromWrongThreadException: Sólo el subproceso original que creó una jerarquía de vista puede tocar sus vistas
- Android AsyncTask como argumento del método
- Android Asynctask pasando una sola cadena
- ¿Cómo prevenir el retraso de la interfaz de usuario al actualizar la notificación al descargar el archivo?
- Async tarea para mostrar un AlertDialog
- Android AsyncTasks Cómo comprobar si la actividad aún se está ejecutando
- Java: Subclase AsyncTask
Pase su vista inflada a la AsyncTask como esto:
public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{ private Context mContext; private View rootView; [...] public RecuperarComentarisFoto(Context context, View rootView){ this.mContext=context; this.rootView=rootView; } @Override protected void onPreExecute() { [...] } @Override protected String doInBackground(String... arg0) { params.add(new BasicNameValuePair("pid", "1")); JSONObject json = jsonParser.makeHttpRequest(url_get_comentaris, "GET", params); JSONArray productObj; //HERE I RETRIEVE DATA FROM JSON. ITS WORKING OK. return null; } @Override protected void onPostExecute(String result) { //super.onPostExecute(result); <--GET RID OF THIS (it will screw up on 2.1 devices) this.pDialog.dismiss(); // use rootview to findViewById TextView comentariEditText = (TextView) rootView.findViewById(R.id.commentsMostrar); }
Entonces llame así,
View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); cont=getActivity(); new RecuperarComentarisFoto(cont, myFragmentView).execute();
Intente como después de pasar MyFragmentA
contexto en lugar de getActivity()
:
cont=this; new RecuperarComentarisFoto(cont).execute();
Y cambiar RecuperarComentarisFoto
como
public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{ public Fragment mContext; [...] public RecuperarComentarisFoto(Fragment context){ this.mContext=context; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); this.pDialog.dismiss(); TextView comentariEditText = (TextView)mContext.findViewById(R.id.commentsMostrar); } //...your code..
Sólo tiene que añadir un parámetro extra a su AsyncTask con la vista myFragmentView y encontrar su texto en eso.
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); cont=getActivity(); new RecuperarComentarisFoto(cont, myFragmentView).execute(); return myFragmentView; }
Y luego usar esa vista.
TextView comentariEditText = (TextView) mView.findViewById(R.id.commentsMostrar);
- SetRequestProperty throwing java.lang.IllegalStateException: No se puede establecer la propiedad de la solicitud después de la conexión se realiza
- Cómo cambiar el formato de imagen de JPEG a PNG en android?