Передать аргумент List‹Strings› в конечную точку

Я пишу игру для Android, используя конечные точки Google.

Мы хотим проверить, кто из друзей пользователей facebook также использует наше приложение (каждый пользователь получает свой собственный идентификатор в игре, и его идентификатор facebook является строковым полем объекта User).

Итак, я получаю список идентификаторов Facebook друзей в список и хочу передать его на сервер, используя конечные точки, и сделать несколько запросов типа: select n from User n where n.facebookId IN ("+listOfFriends+") Проблема в том, что я не могу передать список конечным точкам.

Я сделал класс контейнера:

@Entity
public class StringsListContainer {
    private List<String> listString;

    public List<String> getStringsList() {
        return listString;
    }
    public void setStringsList(List<String> objectsList) {
        this.listString = objectsList;
    }
    public StringsListContainer(List<String> listString) {
        this.listString = listString;
    }
}

И в UserEndpoints мой Api:

    @SuppressWarnings({ "unchecked", "unused" })
@ApiMethod(name = "getTopFriendsForUser")
public CollectionResponse<User> getTopFriendsForUser(
        @Nullable @Named("cursor") String cursorString,
        @Nullable @Named("limit") Integer limit,
        StringsListContainer friendsLine) {
    System.out.println( "In getTopFriendsForUser endpoint" );
    EntityManager mgr = null;
    Cursor cursor = null;
    List<User> execute= new ArrayList<User>();

        //next will go in chunks depending on size of StringsList
    for(String s : friendsLine.getStringsList())
    {
        if(listOfFriends.isEmpty()) {
            listOfFriends = "'" + s + "'";
        } else {
            listOfFriends = listOfFriends + ",'" + s + "'";
        }
    }

    System.out.println( listOfFriends.toString());

        try {
            mgr = getEntityManager();
            Query query = mgr.createQuery("select n from User n where n.facebookId IN ("+listOfFriends+")");
            if (cursorString != null && cursorString != "") {
                cursor = Cursor.fromWebSafeString(cursorString);
                query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
            }

            if (limit != null) {
                query.setFirstResult(0);
                query.setMaxResults(limit);
            }
            execute = (List<User>) query.getResultList();
            cursor = JPACursorHelper.getCursor(execute);
            if (cursor != null)
                cursorString = cursor.toWebSafeString();

            for (User obj : execute)
                ;
            System.out.println("Ending");
        } finally {
            mgr.close();
        }


    return CollectionResponse.<User> builder().setItems(execute)
            .setNextPageToken(cursorString).build();
}

Я создаю клиентские библиотеки и вызываю их из клиента следующим образом:

CollectionResponseUser response = endpoint.getTopFriendsForUser(friendsList).execute();

Тем не менее я получаю ошибку The method getTopFriendsForUser() in the type Userendpoint is not applicable for the arguments (StringsListContainer)

Кто-нибудь может посоветовать, как это решить? Или, может быть, есть лучший способ проверить это?


person user3568302    schedule 12.05.2014    source источник
comment
Тот же вопрос у меня есть. Ответ здесь stackoverflow.com/questions/ 20147670/ Но я не могу найти ничего, чтобы подтвердить это, и это не похоже на лучший способ сделать что-то. Я надеюсь на лучшую идею. Прошло некоторое время с тех пор, как вы задали вопрос, вы нашли способ?   -  person Ron H    schedule 12.12.2014