1. 程式人生 > >在非同步載入 AsyncTask 中用動態的陣列作為引數

在非同步載入 AsyncTask 中用動態的陣列作為引數

分析問題:在非同步執行的時候,                           new DownloadTextTask().execute("http://192.168.1.56:30002/?ID=101&NO=0",                                                                                     "http://192.168.1.56:30002/?ID=102&NO=0"); // 下載檔案 那麼這裡面的這兩個 String 型別引數是固定的,在實際開發中,我下載的這個路徑一般是從XML檔案解析下來的,要是我們解析得到的路徑個數不確定和路徑的內容不確定的情況下,上面這個方法的缺陷很快就暴漏出來了。 決解的思路:    首先我們先來了解這句   protected Boolean doInBackground(String... urls) {  } 從這裡我們知道,(String... urls) 裡面是一個可變引數的陣列,是把new DownloadTextTask().execute("……","……");轉化為一個數組。因此,我們就要從傳入的引數入手,決解的辦法就是,不要把 String 一個一個的傳入了,我們直接把一個 String[ ] 型別傳進去。 下面就來介紹在專案中應用吧! 總體的程式碼: if (isNetworkAvailable()) {
            MyDB db = new MyDB(WelcomeActivity.this);
            Cursor cursor = db.SECELTSQL(InfoBean.find());
            String[] list = getList(cursor);
            if (list.length != 0) {
                new DownloadImageTask().execute(list); // 下載圖片
            }else{
                Log.d("WecomeActivity", "下圖片的list.size()為空!");
            }
        } else {
            Toast.makeText(WelcomeActivity.this, "網路連結出錯,請檢查網路!", 1).show();
        }
        Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
我通過資料庫的查詢獲取 cursor 物件: Cursor cursor = db.SECELTSQL(InfoBean.find());  //  因為我解析到的檔案路徑儲存到資料庫中,這裡去查詢檔案的路徑  String[] list = getList(cursor);  獲取 String[ ] 陣列的 public String[] getList(Cursor cursor) {
        arr = new String[cursor.getCount()];
        if(cursor!=null){
            cursor.moveToFirst();
            for(int i=0;i<cursor.getCount();i++){
//                String id = cursor.getString(0);
//                arr[i] = "http://192.168.1.56:20002/?ID=103&NO="+id;
                arr[i] = cursor.getString(0);  // 把路徑儲存到陣列中
                cursor.moveToNext();
            }
            return arr;
        }
        return null;
    }
在非同步類的 doInBackground 中
        protected Boolean doInBackground(String... urls) {
            int count = 0;
            for (int i = 0; i < urls.length;i++) {
                // ---download the image---
                Log.d("WelcomeActivity", "驗證 urls["+i+"]:的值"+urls[i]+"\t urls的長度為:"+urls.length);
                LoadDown load = new LoadDown(WelcomeActivity.this);
執行結果: