9

でより多くの値を渡す方法doInBackground

AsyncTaskの見た目はこんな感じです。

private class DownloadFile extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... sUrl) {
        {

        }
}

どうにかしてより多くの値を渡すことは可能ですかprotected String DoInBackground

例えば:protected String doInBackground(String... sUrl, String... otherUrl, Context context)

そしてexecuteAsyncTaskその後はどうですか?new DownloadFile.execute("","",this)か何か?

4

9 に答える 9

3

次の理由により、できません。

protected String doInBackground(String... sUrl, String... otherUrl, Context context)

は有効なメソッド シグネチャではありません。ドット表記 (Varargs) は、メソッドの最後のパラメーターとしてのみ使用できます。この制限は、そうしないとポリモーフィズムがより複雑になるためです。実際、Java はどの文字列が に移動しsUrl、どれが に移動するかをどのように知るのでしょうotherUrlか?

さらに、doInBackgroundのメソッドをオーバーライドしますAsyncTask。そのため、メソッド シグネチャを変更することはできません。

ただし、できることは、これらの値をクラスのメンバーにして、クラスのコンストラクターに渡すDownloadFileか、setter を追加して を呼び出す前にそれらを設定することexecuteです。

于 2013-05-28T09:17:35.293 に答える
3

はい、より多くの値を渡すことができますが、渡すことはできconstructorませんdoInBackground

この方法を試してください

 new DownloadFile(String sUrl,String other Url,Context context).execute();

非同期タスク

 private class DownloadFile extends AsyncTask<String, Integer, String> {

    public DownloadFile(String url,String url2,Context ctx)
    {

    }
    @Override
    protected String doInBackground(String... sUrl) {
    {

    }

}

于 2013-05-28T09:15:12.597 に答える
1

Ypu は、String......str を使用して、さまざまな型パラメーターと文字列データを渡すコンストラクターを作成できます。

    private class DownloadTask extends AsyncTask<String, Integer, String> {
        private Context context;
          byte[] byteArray;
        public DownloadTask (Context c,byte[] byteArray){
            context = c;
            byteArray=byteArray;
        }
        @Override
        protected String doInBackground(String... str) {
        {
              // use context here
     System.out.println(param[0]);
          }
  }



new DownloadTask(context,bytearray).excute("xyz");
于 2013-05-28T09:26:21.747 に答える
1

コンストラクタを使用できます

 private class DownloadFile extends AsyncTask<String, Integer, String> {
            private Context context;
            public void DownloadFile(Context c,String one, int two){
                context = c;
            }
            @Override
            protected String doInBackground(String... sUrl) {
            {
                  // use context here
            }
    }
于 2013-05-28T09:15:12.237 に答える