地理查询中的地图 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) { }
    });

}