2013-07-28 2 views
0

Я использую асинхронный код для извлечения изображений из сети внутри цикла for. Pls предлагает, что я могу сделать, чтобы быстро создать этот список. Я передаю эти данные в listview.Async Задача работает очень медленно

private class CreateItems extends AsyncTask<Void, Void, Void>{ 
    protected Void doInBackground(Void... params) { 
     android.os.Debug.waitForDebugger(); 
     SharedPreferences sp = getSharedPreferences(UserDataManagement.CATALOG, 0); 
     String items = sp.getString("items", ""); 
     try { 
      JSONArray array = new JSONArray(items); 
      for(int i=0;i<array.length();i++){ 
       JSONObject item = array.getJSONObject(i); 
       String id = item.getString("id"); 
       String firstName = item.getString("first_name"); 
       String lastName = item.getString("last_name"); 
       String imageUrl = item.getString("image"); 
       InputStream in = new java.net.URL(imageUrl).openStream(); 
       Bitmap imageBitmap = BitmapFactory.decodeStream(in); 
       in.close(); 
       Item item = new Item(id, firstName, lastName, imageUrl, imageBitmap); 
       itemList.add(item); 
       /* if(i!=0 && i%10==0){ 
        runOnUiThread(new Runnable() { 
         public void run() { 
          adapter.notifyDataSetChanged(); 
         } 
        }); 
       }*/ 
      } 
     } 
     catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(Void result) { 
     adapter.notifyDataSetChanged(); 
    } 
} 

ответ

0

Вы должны создать асинхронные задачи в цикле, которые будут получать изображения из Интернета параллельно.

+0

Спасибо за ваш ответ. Но это все еще не сработало. Конечным решением, которое работало, было создание новой Thread вместо async-задачи и немедленное начало ее использования с использованием одновременного обратного отсчета. Я думаю, что моя предыдущая задача async не смогла начать сразу после вызова или была бы заблокирована чем-то другим. Для получения изображений через Интернет я использовал AsyncHttpClient. – funambulist

0

Окончательное решение, которое сработало, заключалось в создании новой темы вместо задачи async и ее немедленном запуске с использованием обратного отсчета. Я думаю, что моя предыдущая задача async не смогла начать сразу после вызова или была бы заблокирована чем-то другим. Для получения изображений через Интернет я использовал AsyncHttpClient.

final java.util.concurrent.CountDownLatch latch = new CountDownLatch(1); 
    Thread getInfo = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      latch.countDown(); 
          do something 
          runOnUiThread(new Runnable() { 
           public void run() { 
            list.add(item); 
            adapter.notifyDataSetChanged(); 
           } 
          }); 
        } 
    }); 

      getInfo.start(); 
    try { 
     latch.await(); 
    } 
    catch(InterruptedException ex){ 
     ex.printStackTrace(); 
    } 
Смежные вопросы