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 和添加多个标记来映射的主要内容,如果未能解决你的问题,请参考以下文章