Я пишу игру для 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)
Кто-нибудь может посоветовать, как это решить? Или, может быть, есть лучший способ проверить это?