[英]JSON parsed to ArrayList. How can I get it to repeat data in onPostExecute for multiple map markers?
[英]Parsing JSON data to Map markers, all markers showing the same info, how can I fix this?
需要一點幫助。
我有一些商店的JSON和商店信息,比如他們的名字,ID和位置。 我將其解析為ArrayList。
通過AsyncTask我將它們繪制在地圖上。 目前,這是4家商店。 我覆蓋了標記onClick以我想要的方式顯示數據。 我遇到的問題是,盡管基於經度和緯度標記位於正確的位置,但其他信息則不然。
當我點擊標記時,所有這些都列出了相同的商店名稱。 它只顯示我的JSON中的最后一個商店。 所有數據都來自我JSON中的最后一個商店。 這是我的onPostExecute()代碼:
@Override
protected void onPostExecute(ArrayList<ShopArray> shopArray) {
super.onPostExecute(shopArray);
for (ShopArray shopArrayOb : shopArray) {
double lat = shopArrayOb.geo_lat;
double lng = shopArrayOb.geo_lng;
final String barName = shopArrayOb.bar_name;
LatLng shopLocations = new LatLng(lat, lng);
MarkerOptions marker = new MarkerOptions()
.position(shopLocations)
gMap.addMarker(marker);
gMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
testText.setText(barName);
return false;
}
});
}
我真的不知道如何解決這個問題。 我只是想讓它顯示標記的正確名稱,以及其他數據。 它不斷顯示我JSON中最后一個商店的數據。 如果您需要查看更多我的代碼,請告訴我,我會更新我的帖子。
我非常感謝你的幫助,提前謝謝!
編輯:我剛剛使用默認標記onClick進行了測試。 (.title和.snippet)並且它有效! 它顯示正確的信息! 有沒有辦法獲得自定義onClick呢? 看起來像setOnMarkerListener導致了這個問題。
這是因為你多次在SAME gMap
對象上調用setOnMarkerClickListener()
。 通過這種方式,最后一次通話生效並不奇怪,最后一個商店的信息將被使用。 您應該只設置一次OnMarkerClickListener
。 當然,您必須在其onMarkerClick()
方法中識別您的標記,以確定點擊了哪個商店。
您可以將所有標記放在HashMap中:
//somewhere befor async task
HashMap<LatLng, String> map = new HashMap<LatLng, String>();
然后添加標記:
//in your post execute
map.put(shopLocations, barName);
然后在你的聽眾中:
gMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
testText.setText(map.get(marker.getPosition()));
return false;
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.