2014-09-23 2 views
0

ниже код работает, но если я не-комментарий 5-й строки я получаю ошибкуПочему мой фильтр базы данных не работает с хранилищем google?

public void listByKindandFilterById(String kindName, String sortPropertyName, com.google.cloud.backend.core.CloudQuery.Order order, 
         int limit, Scope scope, CloudCallbackHandler<List<CloudEntity>> handler, String Id) { 

    Log.d(TAG, Id); // I am definitely getting what I expect and whats in the db 
    CloudQuery cq = new CloudQuery(kindName); 
    //cq.setFilter(Filter.eq("rideid", Id)); 
    cq.setSort(sortPropertyName, order); 
    cq.setLimit(limit); 
    cq.setScope(scope); 
    this.list(cq, handler); 
} 

Я новичок в датастор и просто хочет, чтобы воссоздать ИНЕК в SQL, т.е. SELECT * kindName WHERE rideid = Id

Что я делаю неправильно?

Здесь ошибка я получаю, когда я не-закомментировать строку:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 503 Service Unavailable 
{ 
"code": 503, 
"errors": [ 
{ 
"domain": "global", 
"message": "com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.\nThe suggested index for this query is:\n <datastore-index kind=\"Ridemessage\" ancestor=\"false\" source=\"manual\">\n  <property name=\"rideid\" direction=\"asc\"/>\n  <property name=\"_createdAt\" direction=\"desc\"/>\n </datastore-index>\n\n", 
"reason": "backendError" 
} 
], 
"message": "com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.\nThe suggested index for this query is:\n <datastore-index kind=\"Ridemessage\" ancestor=\"false\" source=\"manual\">\n  <property name=\"rideid\" direction=\"asc\"/>\n  <property name=\"_createdAt\" direction=\"desc\"/>\n </datastore-index>\n\n" 
}  
+0

DatastoreNeedIndexException: индекс соответствия не найден. \ NВведенный индекс для этого запроса: \ n <тип datastore-index = \ "Ridemessage \" ancestor = \ "false \" source = \ " manual \ "> \ n <свойство name = \" rideid \ "direction = \" asc \ "/> \ n <свойство name = \" _ createdAt \ "direction = \" desc \ "/> \ n \ n \ n " –

ответ

2

Датастору нужен индекс, чтобы иметь возможность обслуживать запрос. Вы можете посмотреть this document, чтобы лучше понять, как они работают.

В принципе, я бы предложил, чтобы решить вашу проблему, чтобы подтолкнуть ваш код к вашему devserver и убедиться, что вы запустили этот запрос на своем devserver. Это обновит ваш файл datastore-indexes.xml, а при обновлении вашего приложения обязательно запустите «индексы обновления». Он должен работать нормально. Я уже объяснил аналогичную проблему here

+0

Это имеет большой смысл, и теперь я смотрю на свой файл datastore-indexes.xml, который показывает, что автогенерация тоже была ложной. К сожалению, я не могу отметить, что вы ответили прямо сейчас, так как мне нужно выяснить, как для запуска этого на dev-сервере и нажатия на google, чтобы подтвердить, что все работает - бэкэнд-стартер, похоже, сильно отличается от других приложений, т. е. https://github.com/GoogleCloudPlatform/endpoints-codelab-android несет со мной, пока я рисую это out – EnduroDave

+0

Обратите внимание, что сообщение об ошибке дает рекомендуемую запись в 'datastore-indices.xml', который вы можете добавить вручную. Тем не менее, вы обычно хотите, чтобы модульные тесты выполняли доступ к хранилищу данных, чтобы индексы могли автоматически генерироваться. – dyoo