2011-02-03 7 views
19

次のコードを使用してAsyncTaskを作成しています。異なるオブジェクトをパラメータとしてAsycTaskに渡すにはどうすればいいですか?

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"); 

    } 

} 

は今、私はそれを二つのパラメータcustomlistobjectボイド進歩とboolean戻り値の型を持つFileオブジェクトを渡したいです。

customlistobjectをにFileオブジェクトとともに渡す方法がわかりません。

答えて

21

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

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"); 
    } 
} 

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

Octavian Damieanも良い方法を書いています...

7

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

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

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

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]); 

これは動作します:

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]); 

他のオプションがあり、これらのパラメータを取り、あなたのAsyncTaskのコンストラクタを持つことですdoInBackground()への実際のパラメータはvarargsリストであり、単一のオブジェクトではありません。

関連する問題