我是线程新手。我正在尝试加载一小部分照片。现在我正在使用异步任务/线程,但是如何使结果顺序?以下是插图:
我想要的是什么:
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 :(得分:0)
最简单的做法是让onPostExecute
方法调用一个执行排序的例程:传递ContactInfo和Uri,然后将Uri与原始文件进行比较,并将其放在适当的位置。
或者修改你的AsyncTask
所以不是每个Uri启动一个,而是启动一个,你一次传递所有Uri
,然后从那里开始。
答案 1 :(得分:0)
我认为,根据定义,“异步任务”不同步......异步字面意思是“不同步”。如果你想让它同步,只需通过URI调用加载它们的老式方式,获取你的照片,并在加载最后一张照片后再次执行。