gpt4 book ai didi

android - 无法在 AsyncTask 中访问 "findViewById"

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:13 25 4
gpt4 key购买 nike

我正在使用 AsyncTask 类从 php 文件下载数据。下载后,我想把这些数据放到不同的TextView中,但是我不能使用findViewById方法。

问题是,我是通过单独的类来完成的,而且都在一个 fragment 中。

这是我的代码:

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

但也不起作用。

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


}

我该怎么办?

谢谢。

最佳答案

像这样将膨胀的 View 传递给 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();

关于android - 无法在 AsyncTask 中访问 "findViewById",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com