2016-12-13 6 views
0

私の英語は申し訳ありません。フィルタStContainsFilterとFilterPredicateを混在させたデータデータストアのクエリ

私はデータストアのGoogleクラウドにデータを保存するアンドロイドアプリケーションを開発中です。 StContainsFilterFilterPredicateが混在するデータストアのクエリを実行したい。それは動作しません!ここに私のコードです:

DatastoreService service = DatastoreServiceFactory.getDatastoreService(); 
Query q = new Query("utilisateurs"); 
Query.Filter filtrage1 = new Query.FilterPredicate("sexe", Query.FilterOperator.EQUAL, "M"); 

Query.Filter filtrage2 = new Query.FilterPredicate("datenaissance", Query.FilterOperator.LESS_THAN_OR_EQUAL, datemin); 
Query.Filter filtrage3 = new Query.FilterPredicate("datenaissance", Query.FilterOperator.GREATER_THAN_OR_EQUAL, datemax); 

GeoPt center = new GeoPt(Float.parseFloat(lat), Float.parseFloat(lng)); 
double radius = km*1000; 
Query.Filter filtrage4 = new Query.StContainsFilter("location", new GeoRegion.Circle(center, radius)); 
Query.Filter present = Query.CompositeFilterOperator.and(filtrage2,filtrage3,filtrage1,filtrage4); 
q.setFilter(present); 
PreparedQuery pq = service.prepare(q); 
List<Entity> results = pq.asList(FetchOptions.Builder.withDefaults()); 

答えて

0

CompositeFilterを使用することができます。データストアクエリの詳細については、hereをご覧ください。 CompositeFilterを使用すると、複数のフィルタを接続して1つのフィルタとして機能させることができます。ただし、複数のプロパティで不等式フィルタを設定しないよう検討する必要があります。

CompositeFilter nameOfFilter = CompositeFilterOperator.and(Collection<Filter>); 

コレクションはまた、配列リストすることができます。また、ここではコンマ

でCompositeFilterを作成する方法について例をフィルターを区切ることができます:

この構文を使用CompositeFilterを作成するには

Filter filter1 = new FilterPredicate("someProperty", FilterOperator.Equal, someValue) 
Filter filtrage4 = new StContainsFilter("location", new GeoRegion.Circle(center, radius)); 
Filter filtrage2 = new FilterPredicate("datenaissance", Query.FilterOperator.LESS_THAN_OR_EQUAL, datemin); 

CompositeFilter filter = CompositeFilterOperator.or(filter1, filtrage4, filtrage2); 

CompositeFilterOperatorを使用し、すべてのフィルタを適用する必要がある場合、またはフィルタを適用するフィルタが1つあれば十分です。

StContainsFilterはQuery.Filterの直接のサブクラスなので、技術的にはソリューションが機能するはずです。あなたの問題の理由は間違ったインポートです。彼らはあなたが "再パッケージ"(私も同じ問題を抱えている)と何かを言うなら、あなたの輸入をチェックし、それらを変更する必要があります

関連する問題