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

问题描述 投票:0回答:1

我有一个扩展应用程序的数据类,它应该存储的数据集之一是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 Maps活动上我抓住了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为键的哈希图中

下次下次出现,这次是上次,不应为null,因为我们已经存储了此poi和时间。但是,无论返回什么null。。>

最后一行代码是makeToast助手,它告诉我数据类中的内容。这为我提供了单击非空值时的日期值

[稍后会在OnPOIClick中生成一个片段,但是仍然在用户执行任何操作之前,您最终不得不查看并不得不“退出”,我不知道这会如何影响它,因为代码甚至在调用该片段的数据之前就已完成,但是感觉应该提到]

        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的全部内容,因此,在这种情况下,我需要考虑另一种方法来处理冷却时间。.但我真的不明白为什么它会造成干扰。

我有一个扩展Application的数据类,它应该存储的数据集之一是POI位置的HashMap,而时间访问的公共类CharacterSheet扩展了Application {...

java android google-maps-android-api-2
1个回答
0
投票

我对返回的PointOfInterest不够周到。每次发出请求时,它都带有一个UUID,当我每次单击它时,都将其作为键变为无用。

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

© www.soinside.com 2019 - 2024. All rights reserved.