2014-03-03 28 views
0

我发现3-4主题的主题,但他们没有帮助,因为我已经尝试了任何人那里建议的话题开场。它已经在我的代码中了。LinkedHashSet迭代器进入无限循环没有明显的原因

// Set the images of users that own this item 
// TODO refactor this 
private LinkedHashSet<UserBasic> itemUsers; 
Iterator<UserBasic> usersIterator = itemUsers.iterator(); 

// We have 4 imageViews available for displaying users avatars, but we might not need them all 
ArrayList<Integer> initialUserAvatarViews = new ArrayList<Integer>(); 
initialUserAvatarViews.add(R.id.iItemProfileUserImageSlotOne); 
initialUserAvatarViews.add(R.id.iItemProfileUserImageSlotTwo); 
initialUserAvatarViews.add(R.id.iItemProfileUserImageSlotThree); 
initialUserAvatarViews.add(R.id.iItemProfileUserImageSlotFour); 

int initialUserAvatarViewsCount = initialUserAvatarViews.size(); 

int a = 0; 
while (usersIterator.hasNext()) { 
    Log.d("LOOPING AT 263", "I CANT STOP LOOPING"); 
    if (a < initialUserAvatarViewsCount) { 
     FetchableImageView fetchableImageView = (FetchableImageView) findViewById(initialUserAvatarViews.get(a)); 
     fetchableImageView.setVisibility(View.VISIBLE); 
     fetchableImageView.setImage(C.API.WEB_ADDRESS + C.API.IMAGES_USERS_FOLDER_THUMBNAIL + usersIterator.next().getUserAvatar(), 
       R.drawable.images_default_avatar_male); 
     a++; 
    } 
} 

回答

1

您通过调用usersIterator.next()来推进游标。可能你的执行流程停止进入IF循环,并且next()永远不会被调用。这就是为什么你得到一个无限循环。确保每次迭代都调用usersIterator.next(),或者在IF条件失败时调用break。

+0

如果我在if语句之外调用usersIterator.next(),我得到一个NoSuchElementException。我会尝试呼叫休息 –

1

我相信发生了以下情况。有一点,在while循环中,你的一个变量等于initialUserAvatarViewsCount,所以if语句停止运行。因此,由于if语句不再运行,因此停止调用userIterator.next(),这意味着迭代器将始终有下一个,从而使您陷入无限循环。

1

hasNext()如果迭代器中有更多项目,则返回true。它本身并没有实际做任何事情。

要移至下一个元素,因此有可能hasNext曾经返回错误,您需要在某个时间调用usersIterator.next()