2011-08-17 19 views
0

新しいスレッドです。私は写真の小さな配列を読み込もうとしています。今は非同期タスク/スレッドを使用していますが、どのように結果を順次にするのですか?以下の図である。ループステートメントでスレッドを同期させる方法は?

私が欲しいもの:私のプログラムではなく、私を与えるもの

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を変更すると、1つのウリを起動する代わりに、すべてをUriに一度に渡してからそこに行くことができます。

0

私は、定義上、 "非同期タスク"は同期していないと思います...非同期は文字通り "同期していません"を意味します。それを同期させたい場合は、URIコールを実行して旧式の方法をロードし、最後の写真がロードされたら写真を取得してもう一度やり直してください。

関連する問題