Class 中存储的数据扩展应用程序返回 null

Data stored in Class extending application returning null

我有一个扩展应用程序的数据class,它应该存储的数据集之一是 POI 位置和访问时间的 HashMap

public class CharacterSheet extends Application {
private HashMap<PointOfInterest, Date> coolDowns = new HashMap<>();

    public HashMap GetAllCoolDowns() { return coolDowns; } //dev only?
    public Date GetCoolDown(PointOfInterest poi) {return coolDowns.get(poi);}
    public Date PutCoolDown(PointOfInterest poi, Date date) {return coolDowns.put(poi, date);}}

然后在 google 地图上 activity 我抓住了 OnPOIclick

    @Override
public void onPoiClick(final PointOfInterest poi) {

    //POI Cool Down
    Date currentTime = Calendar.getInstance().getTime();
    Date lastTime = ((CharacterSheet) this.getApplication()).GetCoolDown(poi);//this ONLY returns null??

    if (lastTime != null){
        int timeDiff = currentTime.compareTo(lastTime);
        makeToast("Time Since last visit: " + timeDiff );
    } else { makeToast("First");
        }

    ((CharacterSheet) this.getApplication()).PutCoolDown(poi, currentTime);
    makeToast("This?" + ((CharacterSheet) this.getApplication()).GetCoolDown(poi));}

顺序应该是单击 poi,获取当前时间..获取上次访问时间,如果上次时间为空..之前从未去过,将时间和日期存储在以 poi 为键的 hashmap 中

下次出现,上次这一次不应该为空,因为我们已经存储了这个 poi 和时间.. 但无论如何 returns null..

最后一行代码是一个 makeToast 助手,告诉我数据中有什么 Class.. 这给了我一个日期值,当我点击时不是空值

稍后在 OnPOIClick 中生成了一个片段,但仍然在用户可以执行任何操作之前,您最终会看到并且必须 "back" 退出,我不知道这怎么可能影响它,因为所有代码甚至在为片段调用数据之前就已完成,但感觉应该提到

        PlacesClient placesClient = Places.createClient(this);
    String placeId = poi.placeId;
    List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.TYPES);
    FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);

    placesClient.fetchPlace(request).addOnSuccessListener(new OnSuccessListener<FetchPlaceResponse>() {
        @Override
        public void onSuccess(FetchPlaceResponse fetchPlaceResponse) {
            Place place = fetchPlaceResponse.getPlace();
            PlaceDataHolder holder = new PlaceDataHolder(place);
            String placeName = poi.name;
            makeLootFragment(holder,placeName);

启动的片段是点击 POI 的全部要点,所以如果是这种情况,我将需要考虑另一种处理冷却时间的方法。但我真的不明白为什么它会干扰。

我对返回的 PointOfInterest 考虑不够周全。每次发出请求时,它都带有一个 UUID,每次我单击它时,它都无法用作密钥。这是通过更改我的 post 操作检查以确保它已进入 hashMap 来发现的, 看到整个 hashMap 的内容, 很快就看到尽管只点击了一个 poi

解决这个问题很简单。我从 poi.name 创建了一个新的 String 变量并用它代替 poi,不得不更改 HashMap 以接受 String 而不是 PointOfInterest