7

我必须在我的应用程序中加载 XML 数据,我在扩展 AsyncTask 的活动类的子类中这样做,如下所示:

public class MyActivity extends Activity {

    ArrayList<Offre> listOffres;

    private class DownloadXML extends AsyncTask<Void, Void,Void>
    {
        protected Void doInBackground(Void... params)
        {
            listOffres = ContainerData.getFeeds();
            return null;
        }
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_liste_offres);

        DownloadXML.execute(); // Problem here !

        for(Offre offre : listOffres) { // etc }
    }
}

我不知道如何在这里使用 execute(),我有以下错误:

无法从 AsyncTask 类型对非静态方法 execute(Integer...) 进行静态引用

我猜一些参数但是什么?

谢谢你。

4

6 回答 6

17

您需要创建DonwloadXML文件的一个实例并调用execute()该方法:

DownloadXML task=new DownloadXML();
task.execute();

编辑:您可能还应该listOffers从您的方法中返回doInBackground()并处理数组。你可以看看这个简单的AsyncTask 教程onPostExecute()AsynTask

于 2012-07-12T12:25:45.560 回答
5

你应该这样称呼它:

new DownloadXML().execute();
于 2012-07-12T12:26:05.487 回答
1

实际上,您正在调用 AsyncTask 的方法(它进一步扩展了 AsyncTask 类),而没有创建该类的 OBJECT。您可以通过两种方式调用执行方法。

  1. 制作类的对象/实例

    DownloadXML task=new DownloadXML();
    task.execute();
    
  2. 通过使用飞行物体。

    new DownloadXML().execute();
    

我更喜欢在这里使用第二种方法来做到这一点。

于 2012-11-19T05:34:29.413 回答
1

好吧,如果你想通过java中的异步任务执行一些代码,你也可以这样做:

AsyncTask.execute(new Runnable() {
            @Override
            public void run() {

                // add code which you want to run in background thread

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // add code which you want to run in main(UI) thread
                    }
                });
            }
        });

kotlin中,如果您使用的是anko,还有更简单的方法可以实现这一点:

  doAsync {
            // add code which you want to run in background thread
            uiThread {
                // add code which you want to run in main(UI) thread
            }
        }
于 2019-03-07T06:25:47.373 回答
0

你也可以执行你的异步任务

new DownloadXML().execute();

或者

 DownloadXML task=new DownloadXML();
 task.execute();

还有一件事你在 asynctask 的数组中得到了比为你的循环迭代使用 postexeceute 方法更好

如下所示

  protected void onPostExecute(String s) {

    for(Offre offre : listOffres) { // do ur work here after feeling array }    


    }
于 2012-07-12T12:50:59.997 回答
0

您必须首先创建 DownloadXML 类的对象。

DownloadXML downloadxml= new DownloadXML();
downloadxml.execute();

并返回 listOffres。

listOffres = ContainerData.getFeeds();
return listOffers;
于 2018-03-27T13:02:39.607 回答