首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储在类扩展应用程序中的数据返回null

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

Stack Overflow用户
提问于 2020-03-17 10:06:31
回答 1查看 41关注 0票数 0

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

代码语言:javascript
运行
复制
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);}}

然后,在谷歌地图活动中,我抓取了OnPOIclick

代码语言:javascript
运行
复制
    @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));}

顺序应为Click poi,Get current time..如果上次访问时间为null,则获取上次访问时间。以前从未出现过,将时间和日期存储在以poi为关键字的hashmap中

下一次出现,这一次上次不应该是空的,因为我们已经存储了这个poi和时间。但是不管它返回什么,都会返回null。

最后一行代码是一个makeToast帮助器,它告诉我数据类中有什么。这将为我提供一个日期值,当我单击not a null value时

后来在OnPOIClick中生成了一个片段,但在用户可以做任何事情之前,我不知道这会对它产生什么影响,因为在为片段调用数据之前,所有的代码都已经完成了,但我觉得应该提到它

代码语言:javascript
运行
复制
        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的全部要点,所以如果是这种情况,我需要考虑另一种方式来处理冷却。但我真的不明白为什么它会干扰。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-19 07:04:38

我对返回的PointOfInterest考虑得不够周到。每次发出请求时,它都会附带一个UUID,使其无法作为键,因为每次我单击它时,它都会发生变化。这是通过更改我的post操作检查来发现的,从确保它已进入hashMap,到查看整个hashMap的内容,很快就会发现,尽管只单击了一个poi,条目仍在不断增加

要解决这个问题非常简单。我从poi.name创建了一个新的字符串变量,并用它代替poi,必须更改HashMap以接受字符串而不是PointOfInterest

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60715357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档