无法在AsyncTask中访问"findViewById"

Rei*_*erd 11 android android-asynctask

我正在使用AsyncTask类从php文件下载数据.下载后,我想把这些数据放到不同的TextViews中,但我不能使用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;
}
Run Code Online (Sandbox Code Playgroud)

我遇到问题的地方:

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

我试过这个:

        TextView comentariEditText = (TextView) mContext.findViewById(R.id.commentsMostrar);
Run Code Online (Sandbox Code Playgroud)

但是也不行.

请注意,我从片段中调用此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;
}


}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

谢谢.

pet*_*tey 27

将您的膨胀视图传递给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);
}
Run Code Online (Sandbox Code Playgroud)

然后这样打电话,

View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false);

cont=getActivity();
new RecuperarComentarisFoto(cont, myFragmentView).execute();
Run Code Online (Sandbox Code Playgroud)

  • 上下文通常是指应用程序或正在使用的活动.视图是UI元素,如TextViews /按钮和容器(LinearLayout等). (2认同)