2011-08-17 2 views
0

Я новичок в обсуждениях. Я пытаюсь загрузить небольшой массив фотографий. Прямо сейчас я использую задачи/темы Async, но как сделать результат последовательным? Ниже приведен пример:Как синхронизировать потоки в инструкции цикла?

Что я хочу:

a[0] = photo1; 
a[1] = photo2; 
a[2] = photo3; 
a[3] = photo4 

Что моя программа дает мне вместо этого. Обратите внимание, что изменения порядка и является случайным:

a[0] = photo[2]; 
a[1] = photo[1]; 
a[2] = etc 

Вот отрывок из моего кода:

... 
for (int i = 0; i < mNoOfContacts; i++) { 
    String stringContactUri = storeSettings.getString("contactUri"+i, ""); 
    if (stringContactUri != ""){ 
     Uri contactUri = Uri.parse(stringContactUri); 
     loadContactInfo(contactUri); 
    } 
... 
private void loadContactInfo(Uri contactUri) { 

    AsyncTask<Uri, Void, ContactInfo> task = new AsyncTask<Uri, Void, ContactInfo>() { 

     @Override 
     protected ContactInfo doInBackground(Uri... uris) {    
      return mContactAccessor.loadContact(getContentResolver(), uris[0]); 
     } 

     @Override 
     protected void onPostExecute(ContactInfo result) { 
      Contacts[mNoOfContacts] = result; 
     Toast.makeText(getApplicationContext(), mNoOfContacts+"Picked Contact"+Contacts[mNoOfContacts].getDisplayName(), Toast.LENGTH_SHORT).show(); 
      mNoOfContacts++; 
     } 
    }; 

    task.execute(contactUri); 
} 
... 

Мой код является модификацией демо-приложения Google Android - визитные карточки. Пожалуйста, помогите! Благодаря!

ответ

0

Что может быть проще всего сделать, это сделать метод onPostExecute вызывать процедуру, которая выполняет сортировку: передать как ContactInfo, так и Uri, а затем сравнить Uri с оригиналом и поместить его в нужное место.

В качестве альтернативы можно изменить свой AsyncTask, поэтому вместо запуска по одному на Uri вы запускаете тот, который вы передаете сразу всем Uri, а затем идите оттуда.

0

Я бы подумал, что по определению «Асинхронные задачи» не синхронизированы ... Асинхронно буквально означает «не синхронизировано». Если вы хотите, чтобы это было синхронизировано, просто загрузите их старомодным способом, выполнив вызов URI, получите свою фотографию и сделайте это снова после загрузки последней фотографии.

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