Не удается получить доступ к «findViewById» в AsyncTask

Я использую класс AsyncTask для загрузки данных из php-файла. После загрузки я хочу поместить эти данные в разные текстовые элементы, но я не могу использовать метод findViewById.

Проблема в том, что я делаю это отдельными классами, и все это внутри фрагмента.

Это мой код:

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; } 

И где у меня проблема:

 @Override protected void onPostExecute(String result) { super.onPostExecute(result); this.pDialog.dismiss(); TextView comentariEditText = (TextView) findViewById(R.id.commentsMostrar); } 

Я пробовал это:

  TextView comentariEditText = (TextView) mContext.findViewById(R.id.commentsMostrar); 

Но не работает.

Обратите внимание, что я вызываю эту AsyncTask из фрагмента. Как вы можете видеть, мне пришлось передать контекст, полученный getActivity () в 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; } } 

Что мне делать?

Спасибо.

Передайте свой завышенный вид в AsyncTask следующим образом:

 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); } 

Затем позвоните так,

 View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); cont=getActivity(); new RecuperarComentarisFoto(cont, myFragmentView).execute(); 

Попробуйте после прохождения контекста MyFragmentA вместо getActivity() :

  cont=this; new RecuperarComentarisFoto(cont).execute(); 

И измените RecuperarComentarisFoto как

 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.. 

Просто добавьте дополнительный параметр в свою AsyncTask с представлением myFragmentView и найдите текст.

 @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; } 

А затем просто используйте это представление ..

 TextView comentariEditText = (TextView) mView.findViewById(R.id.commentsMostrar);