【问题标题】:JSON and Adding multiple markers to mapJSON 和添加多个标记来映射
【发布时间】: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 是无效索引,这让我相信它解析不正确或其他原因。

【问题讨论】:

    标签: android json google-maps


    【解决方案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”。
    • 正确,我希望得到一些帮助来纠正这个问题。
    猜你喜欢
    • 2017-12-18
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2019-10-19
    相关资源
    最近更新 更多