Using the code below to save a GeoPoint, doing setRelativeFindMetadata and setRelativeFindPercentThreshold and then searching, we didn’t get the search results we were expecting. The beforeRelativeFind and afterRelativeFind methods don’t seem to be being called.
Android SDK version : Backendless SDK v1.10 for Android, released 08.11.2014.
public boolean geoSearchPreconditions() {
mRet = false;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
geoDeleteCategorySync("Restaurants");
GeoPoint geoPoint = new GeoPoint();
geoPoint.setLatitude(37.492369);
geoPoint.setLongitude(127.029821);
geoPoint.addCategory("Restaurants");
geoPoint.addMetadata("name", "hana");
geoPoint.addMetadata("address", "1337-31");
Backendless.Geo.savePoint(geoPoint);
geoPoint.setLatitude(37.492186);
geoPoint.setLongitude(127.029945);
geoPoint.addCategory("Restaurants");
geoPoint.addMetadata("name", "sejong");
geoPoint.addMetadata("address", "1337-20");
Backendless.Geo.savePoint(geoPoint);
mRet = true;
} catch (Exception e) {
Log.e(TAG, e.toString());
mRet = false;
}
}
});
try {
thread.start();
thread.join();
} catch (Exception e) {
e.printStackTrace();
}
return mRet;
}
public boolean geoSearchRelativeFindSync() {
mRet = false;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
BackendlessGeoQuery geoQuery = new BackendlessGeoQuery();
geoQuery.setIncludeMeta(true);
geoQuery.addCategory("Restaurants");
Map<String, String> metaSearch = new HashMap<String, String>();
metaSearch.put("name", "hana");
metaSearch.put("address", "1337-31");
geoQuery.setRelativeFindMetadata(metaSearch);
geoQuery.setRelativeFindPercentThreshold(100);
BackendlessCollection<GeoPoint> collection = Backendless.Geo
.getPoints(geoQuery);
if (collection.getTotalObjects() == 1) {
mRet = true;
}
} catch (Exception e) {
Log.e(TAG, e.toString());
mRet = false;
}
}
});
try {
thread.start();
thread.join();
} catch (Exception e) {
e.printStackTrace();
}
return mRet;
}