web-dev-qa-db-ja.com

さまざまなオブジェクトをパラメーターとしてAsyncTaskに渡す方法は?

次のコードを使用してAsyncTaskを作成しています。

public  class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{

    protected Boolean doInBackground(File... file) {

        DalCategories c= new  DalCategories();
        boolean result  = c.saveObject(customlistobject,file[0]);

        return result;    
    }


    protected void onProgressUpdate() {       
        //setProgressPercent(progress[0]); 

    } 

    protected void onPostExecute(boolean result) {     
        //showDialog("Downloaded " + result + " bytes");  

    }

}

ここで、2つのパラメーターcustomlistobjectFileオブジェクトを無効な進行状況とboolean戻り値の型で渡します。

そのcustomlistobjectAsyncTaskオブジェクトと一緒にFileに渡す方法がわかりません。

19
UMAR

完全ではありませんが、実用的な解決策は、オブジェクトをパラメーターとして使用することです。

public  class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{
    protected Boolean doInBackground(Object... param) {
        File file = (File) param[0];
        List list = (CustomList) param[1];
        return result;    
    }

    protected void onProgressUpdate() 
    {       
        //setProgressPercent(progress[0]); 
    } 

    protected void onPostExecute(boolean result) 
    {     
        //showDialog("Downloaded " + result + " bytes");  
    }
}

このコードは単なるサンプルです。instanceofを使用して、インデックス0と1のオブジェクトが実際にファイルまたはCustomListであることを確認する必要があります。

OctavianDamieanも良い方法を書いています...

21
WarrenFaith

2つのオブジェクトをパラメーターとして渡す必要がある場合は、独自のホルダーを作成して、ホルダーオブジェクトを送信するだけです。

Fileオブジェクトとともにカスタムオブジェクトを保持するオブジェクトを作成します。状況に応じて、カスタムオブジェクトにFileオブジェクトを保持し、AsyncTaskカスタムオブジェクトを渡すこともできます。

doInBackgroundメソッド内では、オブジェクトを抽出するだけなので、必要に応じて処理できます。

7

1つのオプションは、これらのパラメーターを受け取るAsyncTaskのコンストラクターを持つことです。

_public  class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{
    List customlistobject;

    public SaveFileToExternalStorage(List aList) {
        customlistobject = aList;
    }

    protected Boolean doInBackground(File... file) {

        DalCategories c= new  DalCategories();
        boolean result  = c.saveObject(customlistobject,file[0]);
_

もう1つのオプションは、オブジェクトをAsyncTaskの最初のタイプのパラメーターとして渡すことです。

_public  class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{

    protected Boolean doInBackground(Object... objs) {

        File file = (File) ibjs[1];
        List customlistobject =  (List) objs[2];
        DalCategories c= new  DalCategories();
        boolean result  = c.saveObject(customlistobject,file[0]);
_

doInBackground()の実際のパラメータは可変引数リストであり、単一のオブジェクトではないため、これは機能します。

7
Heiko Rupp