JSON 和添加多个标记来映射

Posted

技术标签:

【中文标题】JSON 和添加多个标记来映射【英文标题】:JSON and Adding multiple markers to map 【发布时间】:2015-09-15 10:45:23 【问题描述】:

我一直在四处寻找,但我认为我需要个人帮助。我有一个名为“FriendsList”的变量,其中包含 3 个名称,“Andrew”、“Bro”、“Jeremy”。我正在尝试遍历每个名​​称并获取该人的经度和纬度并将其添加到地图中。 到目前为止,我有这个,但我认为 JSON 是错误的,因为我遇到了错误。

     for(int i =0; i < FriendsList.size(); i++)
                
                                        //start the post to the database
                    String responseBody1 = null;
                    httpClient = new DefaultHttpClient();

                    httpPost = new HttpPost("http://skyrealmstudio.com/GetSpecificUserLocation.php");

                    List<NameValuePair> nameValuePair1 = new ArrayList<NameValuePair>();
                    String friendToFind = FriendsList.get(i).toString();
                    nameValuePair1.add(new BasicNameValuePair("Username", friendToFind));


                    try 
                        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
                     catch (UnsupportedEncodingException e) 
                        e.printStackTrace();
                    
                    try 
                        response = httpClient.execute(httpPost);
                        responseBody1 = EntityUtils.toString(response.getEntity());
                        // writing response to log
                        Log.d("Http Response:", response.toString());
                     catch (IOException e) 
                        e.printStackTrace();
                    
                    //end the post response

                    //JSON the string that is got from the post.
                     jsonStr = responseBody1;

                    Log.d("Response: ", "> " + jsonStr);
                    if (jsonStr != null)
                        jsonArr = new JSONArray(jsonStr);


                        JSONObject c = jsonArr.getJSONObject(i);


                       tempMarker = new MarkerOptions()
                                .position(new LatLng(Double.parseDouble(c.getString(TAG_LATITUDE)), Double.parseDouble(c.getString(TAG_LONGITUDE))))
                                .title(friendToFind)
                                .snippet(c.getString(TAG_COMMENTS));
                        markers.add(i, tempMarker);
                    
                


             catch (JSONException e) 
                e.printStackTrace();
            
        

        return null;
    

    public void onPostExecute(Void Result)
    
        for(int i = 0; i < FriendsList.size(); i++)
        
            googleMap.getMap().addMarker(new MarkerOptions().title(markers.get(i).getTitle())
                    .position(new LatLng(markers.get(i).getPosition().latitude, markers.get(i).getPosition().longitude)));
        
    

我从这段代码的 sn-p 得到的错误如下:

      6882-6882/com.skyrealm.brockyy.findmypeepsapp E/androidRuntime﹕ FATAL EXCEPTION: main
Process: com.skyrealm.brockyy.findmypeepsapp, PID: 6882
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
        at java.util.ArrayList.get(ArrayList.java:308)
        at com.skyrealm.brockyy.findmypeepsapp.MainActivity$getFriendsList.onPostExecute(MainActivity.java:631)
        at com.skyrealm.brockyy.findmypeepsapp.MainActivity$getFriendsList.onPostExecute(MainActivity.java:520)
        at android.os.AsyncTask.finish(AsyncTask.java:636)
        at android.os.AsyncTask.access$500(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

我注意到错误表明索引 1 是无效索引,这让我相信它解析不正确或其他原因。

【问题讨论】:

【参考方案1】:

代替这段代码:

for(int i = 0; i < FriendsList.size(); i++)
     
        googleMap.getMap().addMarker(new MarkerOptions().title(markers.get(i).getTitle())
                .position(new LatLng(markers.get(i).getPosition().latitude, markers.get(i).getPosition().longitude)));
     

试试这个:

for(int i = 0; i < markers.size(); i++)
     
        googleMap.getMap().addMarker(new MarkerOptions().title(markers.get(i).getTitle())
                .position(new LatLng(markers.get(i).getPosition().latitude, markers.get(i).getPosition().longitude)));
    

【讨论】:

是的,这就是您收到此异常的原因。在循环中,它将执行 0 10 2 并且标记大小为 1,因此对于 i 值 1 和 2,它将显示“IndexOutOfBoundsException”。 正确,我希望得到一些帮助来纠正这个问题。

以上是关于JSON 和添加多个标记来映射的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌地图上添加多个标记

我想使用带有谷歌地图 SDK 的 JSON 放置多个标记

我可以在 <a> 标记内添加图像映射区域吗?

Restkit 将多个 json 提要映射到同一个数组

添加标记以表示用户的当前位置

如何在python的散点图中添加具有不同标记的多个图例?