java - 存储在类扩展应用程序中的数据返回 null
问题描述
我有一个扩展应用程序的数据类,它应该存储的数据集之一是 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);}}
然后在谷歌地图活动中,我抓住了 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));}
顺序应该是 Click poi, Get current time.. 获取上次访问的时间,如果 last time 为 null.. 从未去过,将时间和日期存储在以 poi 为 key 的 hashmap 中
下一次出现,这次最后一次不应该为空,因为我们已经存储了这个 poi 和时间.. 但无论它返回什么都为空..
最后一行代码是一个 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 的全部要点,因此如果是这种情况,我将需要考虑另一种处理冷却时间的方法..但我真的不明白为什么它会干扰。
解决方案
我对返回的 PointOfInterest 考虑得不够周到。每次发出请求时它都会附带一个 UUID,因为每次我单击它都会更改它,因此它作为键无用。这是通过将我的后期操作检查从确保它已进入 hashMap 更改为查看整个 hashMap 的内容,很快就看到尽管只单击一个 poi,条目仍在建立
解决这个问题很简单。我从 poi.name 创建了一个新的 String 变量并用它来代替 poi,必须更改 HashMap 以接受 String 而不是 PointOfInterest
推荐阅读
- laravel - Laravel 应用程序版本控制
- angular - 角度清除间隔不停止间隔
- wordpress - 根据自定义字段的值动态更改自定义帖子类型和表单的 URL
- ngrx - 如何在赛普拉斯 e2e 测试之前设置 NGRX 状态?
- c++ - transform_reduce & 摆脱 for 循环
- tensorflow - TensorFlow 内部 Python 错误:找不到模块
- c# - 销毁预制件后如何实例化它们?
- keras - Keras 中的 Conv 过滤器可视化:为什么有些过滤器会卡在 loss==0 处,我该如何防止这种情况发生?
- mongodb - Meteor Mongo 聚合返回 BSON 类型
- javascript - 使用 Google Sheet 和 AppScript 向多个收件人发送 HTML 电子邮件