Java 使用google app engine时显示迭代错误
我遇到了以下问题: 我试图抓取距离用户手机x[英里/公里]以内的用户 电话。我正在使用谷歌应用程序引擎的数据存储api,我搞不懂 问题是什么。问题是当我使用 itiration–出现一个错误,告诉我无法在中使用不同的属性 组合过滤器Java 使用google app engine时显示迭代错误,java,google-app-engine,Java,Google App Engine,我遇到了以下问题: 我试图抓取距离用户手机x[英里/公里]以内的用户 电话。我正在使用谷歌应用程序引擎的数据存储api,我搞不懂 问题是什么。问题是当我使用 itiration–出现一个错误,告诉我无法在中使用不同的属性 组合过滤器 package com.linkedlive.business; import java.io.IOException; import java.util.Iterator; import javax.servlet.http.*
package com.linkedlive.business;
import java.io.IOException;
import java.util.Iterator;
import javax.servlet.http.*;
import org.json.JSONArray;
import org.json.JSONObject;
import com.biomedica.server.geolocation.GeoLocation;
import com.biomedica.server.searchtools.SearchForGeolocEntitiy;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.KeyFactory;
@SuppressWarnings("serial")
public class Venue extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
this.doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
String cmd=req.getParameter("cmd");
if(cmd.equals("venuenearby"))
{
GeoLocation geo=new GeoLocation();
SearchForGeolocEntitiy search=new
SearchForGeolocEntitiy("accounts");// this is a class that i created to set the
query filters see bellow
// get request parameters
float lat=Float.valueOf(req.getParameter("lat"));
float lng=Float.valueOf(req.getParameter("lng"));
float rad=Float.valueOf(req.getParameter("rad"));
// calculate the distance
Iterable<Entity>
ent=search.GetJSONForEntitiyNearByUsingBounds(lat,
lng,geo.getGeoLocationBounds(lat, lng, rad) );
Iterator<Entity> i=ent.iterator();
JSONObject json=new JSONObject();
JSONArray injson=new JSONArray();
json.put("result", "venuenearby");
while(i.hasNext())
{
try {
JSONObject j=new JSONObject();
Entity t=i.next();
j.put("key",
KeyFactory.keyToString(t.getKey()));
j.put("userid",
t.getProperty("userid"));
j.put("filepath",
t.getProperty("filepath"));
injson.put(j);
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
json.put("body",injson);
resp.getWriter().write(json.toString());
}
}
}
///////////////////////////////////////////////////////////////////////////////
////////////////////
////////////////////////// SearchForGeolocEntitiy
////////////////////////////////////
package com.biomedica.server.searchtools;
import java.lang.reflect.Array;
import java.util.Arrays;
import com.biomedica.server.geolocation.GeoLocation;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.CompositeFilterOperator;
import com.google.appengine.api.datastore.Query.Filter;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.datastore.Query.FilterPredicate;
import com.google.appengine.api.datastore.Query.CompositeFilter;
public class SearchForGeolocEntitiy {
private String EntitiyName;
private Query q;
public SearchForGeolocEntitiy(String name)
{
EntitiyName=name;
q=new Query(name);
}
public Iterable<Entity> GetJSONForEntitiyNearBy(double lang,double
lat,double rad,int max_result)
{
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
// decleeraing filter object
Filter filter_min_lngt=new
FilterPredicate("lng", FilterOperator.GREATER_THAN, lang-rad);
Filter filter_max_lngt=new
FilterPredicate("lng", FilterOperator.LESS_THAN, lang+rad);
Filter filter_min_lat=new
FilterPredicate("lat", FilterOperator.GREATER_THAN, lat-rad);
Filter filter_max_lat=new
FilterPredicate("lat", FilterOperator.LESS_THAN, lat+rad);
Filter filter_lng=new
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_min_lngt,filte
r_max_lngt));
Filter filter_lat=new
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_min_lat,filter
_max_lat));
Filter filter=new
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_lng,filter_lat
));
q.setFilter(filter);
PreparedQuery pq = datastore.prepare(q);
return pq.asIterable();
}
public Iterable<Entity> GetJSONForEntitiyNearByUsingSSID(String
EntityName,String entityID,String SSID)
{
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
// decleeraing filter object
Filter filter_entityID=new FilterPredicate(EntityName,
FilterOperator.EQUAL, entityID);
Filter filter_min_lngt=new
FilterPredicate("lng", FilterOperator.EQUAL, SSID);
Filter filter=new
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_entityID,filte
r_min_lngt));
q.setFilter(filter);
PreparedQuery pq = datastore.prepare(q);
return pq.asIterable();
}
public Iterable<Entity> GetJSONForEntitiyNearByUsingBounds(float
lng,float lat,GeoLocation.GeoLocationBoundry bound)
{
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
Filter filter_min_lngt=new FilterPredicate("lng",
FilterOperator.LESS_THAN, bound.lng1);
Filter filter_max_lngt=new FilterPredicate("lng",
FilterOperator.LESS_THAN, bound.lng2);
Filter filter_min_lat=new FilterPredicate("lat",
FilterOperator.GREATER_THAN, bound.lat1);
Filter filter_max_lat=new FilterPredicate("lat",
FilterOperator.LESS_THAN, bound.lat2);
Filter filter_lng=new
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_min_lngt,filte
r_max_lngt));
Filter filter_lat=new
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_min_lat,filter
_max_lat));
Filter filter=new
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter_lng,filter_lat
));
q.setFilter(filter);
PreparedQuery pq = datastore.prepare(q);
return pq.asIterable();
}
}
package com.linkedlive.business;
导入java.io.IOException;
导入java.util.Iterator;
导入javax.servlet.http.*;
导入org.json.JSONArray;
导入org.json.JSONObject;
导入com.biomedica.server.geolocation.geolocation;
导入com.biomedica.server.searchtools.searchForgeOlocentiy;
导入com.google.appengine.api.datastore.DatastoreService;
导入com.google.appengine.api.datastore.DatastoreServiceFactory;
导入com.google.appengine.api.datastore.Entity;
导入com.google.appengine.api.datastore.KeyFactory;
@抑制警告(“串行”)
公共类场馆扩展HttpServlet{
公共无效数据集(HttpServletRequest请求、HttpServletResponse响应)
抛出IOException{
这是doPost(请求、响应);
}
public void doPost(HttpServletRequest-req、HttpServletResponse-resp)
抛出IOException{
数据存储服务数据存储=
DatastoreServiceFactory.getDatastoreService();
字符串cmd=req.getParameter(“cmd”);
如果(cmd.equals(“Venunearby”))
{
地理位置=新地理位置();
searchForgeOlocentiy搜索=新建
SearchForGeolocEntitiy(“accounts”);//这是我创建的一个类,用于设置
查询过滤器见下文
//获取请求参数
float lat=float.valueOf(要求获取参数(“lat”));
浮动lng=浮动数值(要求获取参数(“lng”));
float rad=float.valueOf(请求获取参数(“rad”));
//计算距离
可迭代的
ent=search.getJSONForentiyNearByUsingBounds(lat,
液化天然气,地理位置getGeoLocationBounds(纬度、液化天然气、弧度);
迭代器i=ent.Iterator();
JSONObject json=新的JSONObject();
JSONArray injson=新的JSONArray();
put(“result”、“venuenearby”);
while(i.hasNext())
{
试一试{
JSONObject j=新的JSONObject();
实体t=i.next();
j、 放置(“键”,
keyToString(t.getKey());
j、 put(“用户ID”,
t、 getProperty(“userid”);
j、 放置(“文件路径”,
t、 getProperty(“文件路径”);
injson.put(j);
}捕获(NullPointerException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
json.put(“body”,injson);
resp.getWriter().write(json.toString());
}
}
}
///////////////////////////////////////////////////////////////////////////////
////////////////////
//////////////////////////色差
////////////////////////////////////
包com.biomedica.server.searchtools;
导入java.lang.reflect.Array;
导入java.util.array;
导入com.biomedica.server.geolocation.geolocation;
导入com.google.appengine.api.datastore.DatastoreService;
导入com.google.appengine.api.datastore.DatastoreServiceFactory;
导入com.google.appengine.api.datastore.Entity;
导入com.google.appengine.api.datastore.PreparedQuery;
导入com.google.appengine.api.datastore.Query;
导入com.google.appengine.api.datastore.Query.CompositeFilterOperator;
导入com.google.appengine.api.datastore.Query.Filter;
导入com.google.appengine.api.datastore.Query.FilterOperator;
导入com.google.appengine.api.datastore.Query.FilterPredicate;
导入com.google.appengine.api.datastore.Query.CompositeFilter;
公共类搜索{
私有字符串实体名称;
私有查询q;
public SearchForGeolocEntitiy(字符串名称)
{
EntitiyName=名称;
q=新查询(名称);
}
公共Iterable GetJSonForentiyNearby(双朗,双
横向、双弧度、整数最大值(结果)
{
数据存储服务数据存储=
DatastoreServiceFactory.getDatastoreService();
//去斜滤器对象
过滤器过滤器\u最小\u lngt=新
过滤器预测(“lng”,过滤器操作员大于,朗拉德);
过滤器过滤器\u max\u lngt=新
过滤器预测(“lng”,过滤器操作器小于,lang+rad);
过滤器过滤器\u min\u lat=新
过滤器预测(“lat”,过滤器操作员大于,lat rad);
过滤器过滤器\u max\u lat=新
过滤器预测(“lat”,过滤器操作员小于,lat+rad);
过滤器=新的
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter\u min\u lngt,filte
r_max_lngt);
过滤器过滤器=新的
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter\u min\u lat,filter
_马克斯·拉特);
过滤器=新的
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter\u lng,filter\u lat
));
q、 设置过滤器(过滤器);
PreparedQuery pq=数据存储。prepare(q);
返回pq.asIterable();
}
公共Iterable GetJSonForentiyNearByUsingSSID(字符串
EntityName、字符串entityID、字符串SSID)
{
数据存储服务数据存储=
DatastoreServiceFactory.getDatastoreService();
//去斜滤器对象
Filter Filter\u entityID=新的FilterPredicate(EntityName,
FilterOperator.EQUAL,entityID);
过滤器过滤器\u最小\u lngt=新
过滤器预测(“lng”,过滤器操作员,同等,SSID);
过滤器=新的
CompositeFilter(CompositeFilterOperator.AND,Arrays.asList(filter\u entityID,filte
r_min_lngt);
q、 硒