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
我有一个扩展应用程序的数据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