地理查询中的地图 returns null
Map inside geoquery returns null
我正在尝试从地理查询中检索值。这些值正在添加到地图中,但是当我 return 值时,地图是空的。
这里 myPosition
是我用于位置的位置 Latlng 值。
我已经编辑了问题,但问题仍然存在地图仍然是空的
private Map<String, GeoLocation> geoMap;
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate
(R.layout.fragment_new_search2, container, false);
geoMap= new HashMap<>();
readdata(new MyCallback() {
@Override
public void onCallback(Map<String,
GeoLocation> geomap) {
// int size = geomap.size();
}
});
int size = geoMap.size();
Toast.makeText(getContext(),
String.valueOf(size), Toast.LENGTH_SHORT).show();
return view;
}
private void readdata(final MyCallback myCallback){
DatabaseReference ref =
FirebaseDatabase.getInstance().getReference()
.child("WorkLocation");
GeoFire geoFire = new GeoFire(ref);
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(myPosition.latitude, myPosition.longitude), 2);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
geoMap.put(key,location);
}
@Override
public void onKeyExited(String key) {
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
myCallback.onCallback(geoMap);
}
public interface MyCallback {
void onCallback(Map<String, GeoLocation> geomap);
}
我在 onkeyentered
里面尝试了一个吐司,值在那里并且它们正在被添加但是,值仍然没有 return 进入方法并且地图的大小仍然为零。
所有需要加载数据的代码都必须在 on...
方法内部(或从内部调用)。所以:
DatabaseReference ref =
FirebaseDatabase.getInstance().getReference()
.child("WorkLocation");
GeoFire geoFire = new GeoFire(ref);
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(myPosition.latitude, myPosition.longitude), 2);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
geoMap.put(key,location);
myCallback.onCallback(geoMap);
}
@Override
public void onKeyExited(String key) { }
@Override
public void onKeyMoved(String key, GeoLocation location) { }
@Override
public void onGeoQueryReady() { }
@Override
public void onGeoQueryError(DatabaseError error) { }
});
}
如果您只想在通过 Geofire 加载所有初始密钥后调用 onCallback
,请将其放入 onGeoQueryReady
:
DatabaseReference ref =
FirebaseDatabase.getInstance().getReference()
.child("WorkLocation");
GeoFire geoFire = new GeoFire(ref);
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(myPosition.latitude, myPosition.longitude), 2);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
geoMap.put(key,location);
}
@Override
public void onKeyExited(String key) { }
@Override
public void onKeyMoved(String key, GeoLocation location) { }
@Override
public void onGeoQueryReady() {
myCallback.onCallback(geoMap);
}
@Override
public void onGeoQueryError(DatabaseError error) { }
});
}
我正在尝试从地理查询中检索值。这些值正在添加到地图中,但是当我 return 值时,地图是空的。
这里 myPosition
是我用于位置的位置 Latlng 值。
我已经编辑了问题,但问题仍然存在地图仍然是空的
private Map<String, GeoLocation> geoMap;
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate
(R.layout.fragment_new_search2, container, false);
geoMap= new HashMap<>();
readdata(new MyCallback() {
@Override
public void onCallback(Map<String,
GeoLocation> geomap) {
// int size = geomap.size();
}
});
int size = geoMap.size();
Toast.makeText(getContext(),
String.valueOf(size), Toast.LENGTH_SHORT).show();
return view;
}
private void readdata(final MyCallback myCallback){
DatabaseReference ref =
FirebaseDatabase.getInstance().getReference()
.child("WorkLocation");
GeoFire geoFire = new GeoFire(ref);
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(myPosition.latitude, myPosition.longitude), 2);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
geoMap.put(key,location);
}
@Override
public void onKeyExited(String key) {
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
myCallback.onCallback(geoMap);
}
public interface MyCallback {
void onCallback(Map<String, GeoLocation> geomap);
}
我在 onkeyentered
里面尝试了一个吐司,值在那里并且它们正在被添加但是,值仍然没有 return 进入方法并且地图的大小仍然为零。
所有需要加载数据的代码都必须在 on...
方法内部(或从内部调用)。所以:
DatabaseReference ref =
FirebaseDatabase.getInstance().getReference()
.child("WorkLocation");
GeoFire geoFire = new GeoFire(ref);
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(myPosition.latitude, myPosition.longitude), 2);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
geoMap.put(key,location);
myCallback.onCallback(geoMap);
}
@Override
public void onKeyExited(String key) { }
@Override
public void onKeyMoved(String key, GeoLocation location) { }
@Override
public void onGeoQueryReady() { }
@Override
public void onGeoQueryError(DatabaseError error) { }
});
}
如果您只想在通过 Geofire 加载所有初始密钥后调用 onCallback
,请将其放入 onGeoQueryReady
:
DatabaseReference ref =
FirebaseDatabase.getInstance().getReference()
.child("WorkLocation");
GeoFire geoFire = new GeoFire(ref);
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(myPosition.latitude, myPosition.longitude), 2);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
geoMap.put(key,location);
}
@Override
public void onKeyExited(String key) { }
@Override
public void onKeyMoved(String key, GeoLocation location) { }
@Override
public void onGeoQueryReady() {
myCallback.onCallback(geoMap);
}
@Override
public void onGeoQueryError(DatabaseError error) { }
});
}