Twitter4j, В запросе указано слишком много терминов

Я использую следующий метод, чтобы получить все экранные имена пользователей, которые следуют за аутентифицированным пользователем.

private void getFollowing() {   
     Twitter t = new TwitterFactory().getInstance();
     t.setOAuthConsumer(OAUTH.CONSUMER_KEY, OAUTH.CONSUMER_SECRET);
     aToken = getToken();
     t.setOAuthAccessToken(aToken);
     try {
        long[] friendsID = t.getFriendsIDs(userID, -1).getIDs();
        ResponseList<User> userName = t.lookupUsers(friendsID);
        int count = 0;
        for (User u : userName) {
            count++;
            Log.d("USERNAME : "+ Integer.toString(count), u.getScreenName());
        }
     } catch (TwitterException e) {
        e.printStackTrace();
    }
}

t.lookupUsers(friendsID) вызывает следующую ошибку.

W/System.err(16076): {"errors":[{"code":18,"message":"Too many terms specified in query"}]}

Насколько я понимаю, метод lookupUsers() будет возвращать информацию о 100 пользователях одновременно. Я предоставляю больше, чем это. Может быть поэтому? Если да, то как я могу ограничить исходный запрос и перебрать оставшихся пользователей, чтобы получить все их псевдонимы?

Если я ошибаюсь в том, почему я получаю сообщение об ошибке, что еще я делаю неправильно?

ОТВЕТ

    private void getFollowing() {   
         Twitter t = new TwitterFactory().getInstance();
         t.setOAuthConsumer(OAUTH.CONSUMER_KEY, OAUTH.CONSUMER_SECRET);
         aToken = getToken();
         t.setOAuthAccessToken(aToken);
         ArrayList<String> names = new ArrayList<String>();
         try {
            int start = 0;
            int finish = 100;
            ArrayList<Long> IDS = new ArrayList<Long>();
            long[] friendsID =  t.getFriendsIDs(userID, -1).getIDs();
            boolean check = true;
            while (check) {
                for (int i=start;i<finish;i++) {
//get first 100     
                    IDS.add(friendsID[i]);
//if at the end, stop
                    if (friendsID.length-1 == i) {
                        check = false;
                        break;                      
                    }
                }
//set values for next 100
                start = start+100;
                finish = finish+100;
                long[] ids = Longs.toArray(IDS);
                ResponseList<User> userName = t.lookupUsers(ids);
//clear so long[] holds max 100 at any given time
                IDS.clear();
                for (User u : userName) {
                    names.add(u.getScreenName());
                }
            }
            String[] screenNames = (String[]) names.toArray(new String[names.size()]);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, screenNames);
            mPreview.setAdapter(adapter);
         } catch (TwitterException e) {
            e.printStackTrace();
        }
    }

person r2DoesInc    schedule 23.05.2012    source источник
comment
Можете ли вы опубликовать свое решение в качестве ответа ниже, чтобы мы могли убрать его из списка без ответа? Спасибо.   -  person Bill the Lizard    schedule 16.10.2012