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); 
  • Actualización del diálogo de progreso en Activity from AsyncTask
  • Error de puntero nulo en la tarea asíncrona
  • AsyncTask onPostExecute no se ejecuta en el hilo principal?
  • Cómo matar / eliminar / eliminar / detener completamente un AsyncTask en Android
  • Evite bloquear la pantalla mientras ProgressDialog está mostrando
  • AsyncTask no se detendrá incluso cuando la actividad ha destruido
  • Error de Android: "No se pudo crear la instancia de epoll" o "No se pudo crear el canal de despertador"
  • Pasar parámetros a Asynctask
  • Android SQLite Query, insertar, actualizar, eliminar, siempre tiene que estar en el hilo de fondo?
  • ¿Cuál es el meanining de 3 puntos en parámetros de función?
  • Uso pesado de Asynctask
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.