2014-02-17 2 views
2

Я пытаюсь получить отсортированный список счетов игроков из хранилища данных Entity типа «Пользователь» После выполнения:Datastore Запрос возвращает нуль

List<User> entities = ofy().load().type(User.class).order("-score").list(); 

Зная, что я проиндексировал «забьет» атрибут. Вот «User.class»

@Id String userName; 
    String password; 
    @Index int score; 

Субъектов кажется утратившим я не могу получить сущности details.What я пропавшие ???

Я все еще работаю над этим, мне удалось изменить метод для:

@Override 
    public User display(){ 
    List<User> list = ofy().load().type(User.class).order("-score").limit(5).list(); 
    User u= list.get(list.size()-1); 
     if(!u.getUserName().equals(null)) 
     return u; 
     return null; 
    } 

мне удалось избавиться от «нулевого» значения путем проверки поля имени пользователя, но возвращаемое значение всегда было первым пользователем в сущности независимо от того, как я изменил list.get (index). Я пробовал разные значения для индекса, но всегда получал первого пользователя и не мог получить остальные. Надеюсь получить ответ, который поможет решить проблему.

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

public User registerAccount(String username, String password,String confirm) { 
     User user = ofy().load().type(User.class).id(username).get(); 



     if(user == null){ 
      if(password.contains(" "))   
       return null;    
      if(password.compareTo(confirm)!=0) 
       return null; 

      else{ 
      user = new User(username,password,0); 
      ofy().save().entity(user).now(); 
      return user; 
      } 
     } 

     else 
     { 
      return null; 
     } 
    } 

Так есть ли проблема при использовании точено() сохранить() ... а не datastore.put() ... I интересно, повлияет ли это на это, поскольку оценка не найдена в индексах хранилища данных.

+0

Является ли это локальным сервером dev или запущенным приложением? Вы проверяли в средстве просмотра данных, что сущности, которые вы ищете, существуют? – Isaac

+0

Да, конечно, сущности существуют. Я проверил средство просмотра хранилища данных и они существуют. Но я использовал ofy(). Save(). Entity (user) .now(); чтобы сохранить объект типа User, а не использовать datastore.put(). У вас есть идея, может ли это повлиять на запрос? – user3008437

+0

Что значит «сущности кажутся нулевыми»? Список пуст? Вы получаете список нулей из запроса? Объекты имеют нулевые поля? – stickfigure

ответ

1

Одна из возможных причин состоит в том, что аннотация @Index на свойство «оценка» не была с самого начала. Пользователи, которые были добавлены до обновления, не могут быть получены командой .order ("- score").

Другая возможная вещь тривиальная, но обычная! Это имя вашего класса («Пользователь»). У вас есть правильный импорт? GAE также имеет довольно распространенный класс com.google.appengine.api.users.User, который используется для аутентификации.

+0

Я добавил аббатство индекса перед сохранением объектов, но по какой-либо причине при проверке appengine. Индекс хранилища данных пуст. «Вы не создали индексы для этого приложения». не следует добавлять свойство оценки в индекс хранилища данных. – user3008437

+0

«Вы не создали индексы для этого приложения». сообщение в консоли администратора GAE в порядке! Когда вы используете аннотацию @Index, он не будет показывать новый индекс в ссылке «Индексы хранилища данных». Вы можете проверить, есть ли индекс для локального экземпляра GAE (http: // localhost: 8888/_ah/admin /). Выберите, чтобы просмотреть объекты сущностей, чем вы можете видеть в таблице записей, если они индексированы или нет. Каждое значение поля записи, которое не индексируется, имеет метку (unindexed). – MatejC

+0

Я уже проверил, что свойство scire не имеет неиндексной метки, что меня смутило, так как я не смог найти ее в индексах хранилища данных. – user3008437

Смежные вопросы