我有一个扩展应用程序的数据类,它应该存储的数据集之一是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 {...
我对返回的PointOfInterest不够周到。每次发出请求时,它都带有一个UUID,当我每次单击它时,都将其作为键变为无用。
解决这个问题很简单。我从poi.name创建了一个新的String变量,并用它代替了poi,必须将HashMap更改为接受String而不是PointOfInterest