Android geoquery中的映射返回null
我正在尝试从geoquery检索值。值被添加到映射中,但当我返回值时,映射为空。 这里Android geoquery中的映射返回null,android,google-maps,firebase,geolocation,geofire,Android,Google Maps,Firebase,Geolocation,Geofire,我正在尝试从geoquery检索值。值被添加到映射中,但当我返回值时,映射为空。 这里myPosition是我的位置设置值,我正在使用这些值作为我的位置。 我已经编辑了问题,但问题仍然存在。地图仍然是空的 private Map<String, GeoLocation> geoMap; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceStat
myPosition
是我的位置设置值,我正在使用这些值作为我的位置。
我已经编辑了问题,但问题仍然存在。地图仍然是空的
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);
}
私有地图geoMap;
创建视图上的公共视图(更平坦的充气机,
视图组容器,捆绑包savedInstanceState){
视图=充气机。充气
(R.layout.fragment_new_search2,容器,假);
geoMap=新的HashMap();
readdata(新的MyCallback(){
@凌驾
公共空回拨(地图地理地图){
//int size=geomap.size();
}
});
int size=geoMap.size();
Toast.makeText(getContext(),
String.valueOf(size),Toast.LENGTH_SHORT.show();
返回视图;
}
私有void readdata(最终MyCallback MyCallback){
数据库引用ref=
FirebaseDatabase.getInstance().getReference()
.儿童(“工作岗位”);
GeoFire GeoFire=新的GeoFire(参考);
GeoQuery GeoQuery=geoFire.queryAtLocation(新的地理位置(myPosition.latitude,myPosition.longitude),2);
geoQuery.addGeoQueryEventListener(新的GeoQueryEventListener(){
@凌驾
public void onKeyEntered(字符串键、地理位置){
地理地图放置(键、位置);
}
@凌驾
public void onKeyExited(字符串键){
}
@凌驾
public void onKeyMoved(字符串键、地理位置){
}
@凌驾
公共无效onGeoQueryReady(){
}
@凌驾
公共无效onGeoQueryError(数据库错误){
}
});
myCallback.onCallback(geoMap);
}
公共接口MyCallback{
回拨无效(地图地理地图);
}
我在
onkeyentered
中尝试了一个吐司,值在那里,它们被添加,但是值仍然没有返回到方法,映射的大小仍然为零。所有需要加载数据的代码必须在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) { }
});
}
addGeoQueryEventListener
正在异步调用回调方法的可能重复项请检查重复项以了解为什么会出现这种行为,以及如何使用自定义回调解决此问题。@AlexMamo我已更改了代码,但大小仍然为零。是否仍存在任何错误code@JohnO“雷利,我有更改了代码,请你再检查一遍好吗?谢谢,有没有什么方法可以让我在地图中循环,即使我把它放在onKeyEntered中。我在另一个问题中问过它,你能看一下吗?你能现在看一下吗?我想给回收者视图分页,如果我有一张包含钥匙的地图,我不知道该怎么做。这意味着我现在必须对地图中的条目进行分页,但我不知道该怎么做geoQuery geoQuery=geoFire.queryAtLocation(新的地理位置(myPosition.latitude,myPosition.longitude),2);在我的readData方法中,我在预定义的纬度和经度上传递我的值。如何在此readData方法中添加变量