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

実際には、そのクラスの OBJECT を作成せずに、(AsyncTask クラスをさらに拡張する) AsyncTask のメソッドを呼び出しています。execute メソッドは 2 つの方法で呼び出すことができます。

  1. のようなクラスのオブジェクト/インスタンスを作成します

    DownloadXML task=new DownloadXML();
    task.execute();
    
  2. 飛行物体を使って。

    new DownloadXML().execute();
    

ここでは2番目の方法を使用してそれを行うことを好みます。

于 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

あなたはur asynctaskのどちらかを実行できます

new DownloadXML().execute();

また

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

そして、asynctask で配列を取得しているもう 1 つのことは、ループの繰り返しのために postexeute メソッドを使用するのが良いことです。

以下に示すように

  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 に答える