每次我尝试获取一个随机用户时都会出现java.lang.IndexOutOfBoundsException错误

时间:2015-09-26 04:20:08

标签: android parse-platform

问题:我想将当前用户与从列表中随机选择的其他用户进行匹配。但是,这是logcat给出的错误:

 while (rand > mUsers.size() && mUsers.get(rand).hasSameId(mCurrentUser)) {

   query.findInBackground(new FindCallback<ParseUser>() {

相关部分分别为190和78:

 query.findInBackground(new FindCallback<ParseUser>() {
        @Override
        public void done(List<ParseUser> users, ParseException e) {
            setProgressBarIndeterminateVisibility(false);


            if (e == null) {
                //success!
              public  List<ParseUser> mUsers = users;


       // case if there is just one user 

    else if (mUsers.size() >= 2) {

      int rand = (int)(Math.random()*20);
                    while (rand > mUsers.size() && mUsers.get(rand).hasSameId(mCurrentUser)) {
                        rand = (int)(Math.random()*20);
                    }
                    mOpponentRelation.add(mUsers.get(rand));

                    mOpponent = mUsers.get(rand);
                    mCurrentUser.saveInBackground(new SaveCallback() {
                        @Override
                        public void done(ParseException e) {
                            if (e != null) {
                                Log.e(TAG, e.getMessage());
                            }
                        }
                    });

完整代码

{{1}}

我试过谷歌搜索&#34;如何获得随机用户Parse android&#34;但我找不到任何有用的东西。

3 个答案:

答案 0 :(得分:1)

使用%,将强制列表大小随机

代码中的一个示例:

...
else if (mUsers.size() >= 2) {

int rand = Math.random()%(mUsers.size()-1) ;

...

如果rand超出了用户的大小,则会获得java.lang.IndexOutOfBoundsException

此致

答案 1 :(得分:1)

else if (mUsers.size() >= 2) {
   Random random = new Random();
    int rand = random.nextInt(mUsers.size());
    while (mUsers.get(rand).hasSameId(mCurrentUser)) {
        rand = random.nextInt(mUsers.size());
    }
    mOpponentRelation.add(mUsers.get(rand));

    mOpponent = mUsers.get(rand);
    mCurrentUser.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e != null) {
                Log.e(TAG, e.getMessage());
            }
        }
    });

答案 2 :(得分:0)

我认为在while循环中它应该是rand < mUsers.size()。不是>