2014-02-19 3 views
-1

Я пытаюсь передать простой массив строк в мою асинтезу, но это только передача одного элемента. Я знаю, что мой arraylist заполнен 20 элементами перед вызовом asynctask, но когда я проверяю размер в doinBackground, это только один. Я посмотрел на некоторые примеры, вопросы и ответы, очень похожие на мои, но он все еще только передает этот один элемент. Любая помощь будет принята с благодарностью ...Только один элемент массива передается моей asynctask

new LoadImageTask().execute(tuxUrls); //tuxUrls has 20 elements 
... 

private class LoadImageTask extends AsyncTask<ArrayList<String>, Void, ArrayList<Bitmap>> { 

    private String name; 
    Bitmap imageBitmap; 
    ArrayList<TuxLoader> milTuxs = new ArrayList<TuxLoader>(); 


    @Override 
    //protected ArrayList<TuxLoader> doInBackground(ArrayList<String>... tuxUrls) { 

     System.out.println("TuxUrlCount = " + tuxUrls.length); 
     ArrayList<String> t = tuxUrls[0]; //thought I was passing entire array here 

     try { 
      for(int i=0; i<tuxUrls.length; i++) { 

       URL imageUrl = new URL(t[i]); 

       //do work 


      } 

       ... 

      } catch (Exception e) { 
       Log.e("error", "Image Download Failed"); 
      } 
      return milTuxs; 
     } 


    @Override 
    protected void onPostExecute(ArrayList<TuxLoader> milTuxs) { 
     super.onPostExecute(milTuxs); 
     // TODO Auto-generated method stub 

     //set the grid Adapter 
        ... 
+0

Является ли 'tuxUrls' массивом или' ArrayList'? –

+1

Да в doInBackground параметр 'ArrayList ... tuxUrls', что означает' ArrayList [] tuxUrls' – Ali

+0

@Skip, вы проходите через 'tuxUrls', а не ** t **. Я думаю, это была опечатка в коде. – Ali

ответ

0
ArrayList<String> t = tuxUrls[0]; 

try { 
    for(int i=0; i<t.size(); i++) { 
     URL imageUrl = new URL(t.get(i)); 
     //do work 
    } 

      ... 

    } catch (Exception e) { 
     Log.e("error", "Image Download Failed"); 
    } 
return milTuxs; 

«ArrayList ... tuxUrls "означает, что вы можете передать любое количество« ArrayList »для этой функции, но поскольку вы передаете только один, вам нужно выбрать 1-й элемент.

+0

Он все еще не работал. Мне пришлось изменить t.length на t.size и t [i] t.get [i]. Он еще только дал один предмет. – Skip

+0

Я решил. «The ArrayList ... tuxUrls» означает, что вы можете передать любое количество «ArrayList» для этой функции », щелкнув для меня. Поэтому я установил URL imageURL = новый UrL (tuxUrls [0] .get (i)); и это сработало. Раньше я использовал asynctasks, но только для того, чтобы передать один или два элемента, разделенных запятыми. Я никогда не делал этого так, прежде чем остальная часть вашего заявления имеет смысл. Тысяча благодаря тебе, потому что я был повесил трубку на этом форуме! – Skip

+0

К сожалению, я сделал опечатку в моем примере thinkg о простом массиве вместо ArrayList. Теперь исправлено – nikis

1

Попробуйте сделать это,

ArrayList<String> t = new ArrayList<String>(); 
t.addAll(tuxUrls); //this will add the entire list to your t provided tuxUrls is also a list. 

, а затем вызвать каждую из них как

try { 
     for(int i=0; i<t.length; i++) { 

      URL imageUrl = new URL(t.get(i)); 

      //do work 


    } 
+0

я получаю сообщение об ошибке на t.addAll (tuxUrls) Произнесение (Collection ) в тип ArrayList не применяется для аргументов (ArrayList []) – Skip

+0

Попробуйте установить его как ArrayList т = tuxUrls [ 0]; как сказал @nikis. –

Смежные вопросы