【问题标题】:How to add multiple markers to the Google map API via hashmap? - (Android)如何通过 hashmap 向 Google 地图 API 添加多个标记? - (安卓)
【发布时间】:2014-02-06 03:15:20
【问题描述】:

我在 MySQL 数据库中存储了所有位置的纬度和经度。我从数据库中获取数据并用 JSON 解析它。我将所有解析的值存储在 HashMap 集合中。但是,当我遍历 HashMap 集合时,我只能获得最后一个键/值(不是全部)。为了获取每个位置的所有键/值,我需要做什么?这是我的代码:

package com.example.maptest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.util.Log;

import com.google.android.gms.maps.GoogleMap;

public class ShowAllMarkers {

    JSONParser jParser = new JSONParser();

    private static String url_all_markers = "http://...............";

    JSONParser jsonParser = new JSONParser();

    JSONArray markers;
    GoogleMap map;

    // HashMap<String, String> markersList=new HashMap<String, String>();;

    Map<String, String> hMap = new HashMap<String, String>();

    public ShowAllMarkers(GoogleMap map) {
        this.map = map;
    }

    public void getAllMarkers() {
        new AsyncTask<String, String, String>() {

            @Override
            protected String doInBackground(String... args) {

                List<NameValuePair> params = new ArrayList<NameValuePair>();

                JSONObject json = jParser.makeHttpRequest(url_all_markers,
                        "GET", params);

                // in success;
                try {
                    int success = json.getInt("success");

                    if (success == 1) {
                        markers = json.getJSONArray("markers");

                        for (int i = 0; i < markers.length(); i++) {
                            JSONObject markersObject = markers.getJSONObject(i);

                            String lat = markersObject.getString("lat");
                            String longt = markersObject.getString("long");

                            hMap.put("Latitude", lat);
                            hMap.put("Longitude", longt);
                        }
                    }

                } catch (JSONException e) {

                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(String result) {

                // Outputs hashmap elements as key and value
                Set<Map.Entry<String, String>> set = hMap.entrySet();

                for (Map.Entry<String, String> me : set) {
                    Log.d("JWP", "Key is:" + me.getKey() + ", value is: " + me.getValue());

                }
            }

        }.execute();
    }

}

这是我的 json 输出:

{
   "markers":[
      {
         "lat":"40.4176083",
         "long":"49.9389495",
         "title":"Location",
         "description":""
      },
      {
         "lat":"40.4175711",
         "long":"49.9389274",
         "title":"Location",
         "description":""
      },
      {
         "lat":"40.4176178",
         "long":"49.9389621",
         "title":"Location",
         "description":""
      },
      {
         "lat":"40.4176178",
         "long":"49.9389621",
         "title":"Location",
         "description":""
      },
      {
         "lat":"40.4176178",
         "long":"49.9389621",
         "title":"Location",
         "description":""
      },
      {
         "lat":"40.4176178",
         "long":"49.9389621",
         "title":"Location",
         "description":""
      },
      {
         "lat":"40.4176178",
         "long":"49.9389621",
         "title":"Location",
         "description":""
      },
      {
         "lat":"40.4176126",
         "long":"49.9389561",
         "title":"Location",
         "description":""
      }
   ],
   "success":1
}

提前谢谢你。

【问题讨论】:

    标签: java android json google-maps google-maps-api-3


    【解决方案1】:

    我认为这是您使用 hashMap 的方式。

    如果 markers.length() 给出的值大于 1 则意味着它正确加载了标记数组。

    看看这些例子,希望对你有帮助 http://java67.blogspot.com.au/2013/02/10-examples-of-hashmap-in-java-programming-tutorial.html

    根据接口,它接受键值对。在您的代码中,您不断用相同的键替换新值。

    此外,要检查这一点,您可以找出 hashMap 中有多少个元素,我假设您只有 1 个。

    我期待这样的事情

    int key=0;
    Loop{
    
       hMap.put("Latitude_key"+key, lat);
       hMap.put("Longitude_key"+key, longt);
       key++;
    }
    

    一切顺利

    【讨论】:

    • 感谢您的快速回复。但是你能在我的示例代码中展示一下吗?
    • 我的答案已经更新了一些代码。希望对您有所帮助
    • 感谢您的更新。但是你的回答对我来说没有意义。
    • hMap会通过key取值,key为,Latitude_key0为第一个marker的纬度,Longitude_key0为经度。然后 hMap 中的下一个 Lat 和 Lng 将是 Latitude_key1 和 Longitude_key1,只需增加该数字即可获得正确的点。当然,Latitude_key_# 只是我命名键的方式,我相信你可以为 hMap 中的每个键命名比我更好,干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多