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.

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.

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); 
  • utilizar AsyncTask para mostrar datos en ListView
  • Android: ¿cómo esperar AsyncTask para terminar en MainThread?
  • Garbage Collection causa: MediaPlayer finalizado sin ser lanzado
  • Cuál es mejor: Loader o Fragmentos sin cabeza
  • Cómo utilizar notifydatasetchanged in recyclerview gridlayout
  • Android AsyncTask como argumento del método
  • ¿Cuándo muere la instancia de Activity?
  • AsyncTask, ¿debe tomar tal puntaje de ejecución golpeado ...?
  • Barra de progreso de la actualización en listview para archivos múltiples descarga
  • Retrofit de Android: onProgressUpdate para mostrar la notificación de progreso
  • AsyncTask durante más de unos segundos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.