在我的应用程序中我需要执行网络操作,所以我创建了一个AsyncTask
类来在后台执行它,但后来我需要用我得到的信息填充一些textview。
所以我的问题是我可以在主线程中做什么来等待AsyncTask
类完成doInBackground
操作
这是我的AsyncTask类:
public class ObtenerDatos extends AsyncTask<Void, Void, Void> {
private PuertosSaxParser saxparser;
private ArrayList<clsPuertos> Puertos;
/** Return the Puertos info to the main class */
public ArrayList<clsPuertos> getPuertos() {
return Puertos;
}
/** Get the XML info and do the parse */
@Override
protected Void doInBackground(Void... params) {
try {
saxparser = new PuertosSaxParser("http://www.androide.comyr.com/valores.xml");
Puertos = saxparser.parseXML();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
这就是我从主线程中调用它的方式:
try {
int_datos.execute();
//HERE I NEED TO WAIT FOR THE AsyncTask TO COMPLETE THE doInBackground OPERATIONS
Puertos = int_datos.getPuertos();
//THEN I FILL THE TEXTVIEWs WITH THE INFO OF Puertos
} catch (Exception e) {
e.printStackTrace();
}
感谢您的帮助!
修改
MainClass:
ObtenerDatos int_datos = new ObtenerDatos(this);
int_datos.execute();
ObtenerDatos(AsyncTask类):
public class ObtenerDatos extends AsyncTask<Void, Void, Void> {
private PuertosSaxParser saxparser;
private ArrayList<clsPuertos> Puertos;
private Context contexto;
final TextView textSanferPleamarHora = new TextView(contexto);
public ObtenerDatos(Context contexto){
this.contexto = contexto;
}
我尝试将上下文从Main传递到AsyncTask
类以设置TextViews
,但是我遇到了一些错误。
这是对的吗?
答案 0 :(得分:3)
所以我的问题是我可以在主线程中做什么来等待AsyncTask类完成“doInBackground”操作
不要这样做。使用类似AsyncTask
之类的完整和完整点是不阻止主应用程序线程。
请在onPostExecute()
的{{1}}中“填写一些textview以及我获得的信息。”
答案 1 :(得分:1)
无论您想要设置为textView的数据,您只需在postExecute方法中执行此操作即可从doInbackground共享您的数据,只需将最后一个void作为字符串并只传递字符串