Java 从mysql数据库中获取坐标数组,并将其作为标记添加到android中的Google地图中

Java 从mysql数据库中获取坐标数组,并将其作为标记添加到android中的Google地图中,java,php,mysql,google-maps-android-api-2,Java,Php,Mysql,Google Maps Android Api 2,我是初学者。 我在Android Studio中创建了一个带有地图片段的活动,我没有动态添加1个标记或非动态添加多个标记的问题,比如: LatLng sydney = new LatLng(-34, 151); LatLng spokane = new LatLng(-35, 171); LatLng idaho = new LatLng(-32.3, 150); 但是,在从mysql获取坐标后,我需要动态设置一个标记数组 现在,出于测试目的,我有一个按钮“getCoo

我是初学者。 我在Android Studio中创建了一个带有地图片段的活动,我没有动态添加1个标记或非动态添加多个标记的问题,比如:

    LatLng sydney = new LatLng(-34, 151);
    LatLng spokane = new LatLng(-35, 171);
    LatLng idaho = new LatLng(-32.3, 150);
但是,在从mysql获取坐标后,我需要动态设置一个标记数组

现在,出于测试目的,我有一个按钮“getCoords”,它在单击时执行此操作(我将coords输出到textview以查看其是否有效。我能够获取要在textview中显示的值):


谢谢大家!

您可能需要一个for循环来插入标记,您能发布PHP响应吗?这样我就可以帮助您实现一些东西,将其解析到LatLng列表中,然后为每个标记添加一个标记

回答

假设您的点是lat、lng、#
-32.430412、-58.321323、#
之类的线,并且您的服务器会给您一个它们的列表,您首先将其拆分为:

String answer = "-32.430412,-58.321323,#-32.430412,-58.321323,#-32.430412,-58.321323,#";
// note that line breaks disappeared after parsing it to string
String[] parts = answer.split("#");

for (String point : parts) {
String[] pointData = point.split(",");
Float lat= Float.parseFloat(pointData[0]);
Float lng= Float.parseFloat(pointData[1]);
/// check if fit your actual map, remember you need everything required here loaded and declared before calling.
  mMap.addMarker(new MarkerOptions()
    .position(new LatLng(lat, lng))
    .title("Hello world"));


}

我注意到您的服务器正在发送一个类似于:-32.4324234-58.4023392-32.4453244-58.3984984的列表,我建议使用类似
12.34567,12.346432,6 
的东西,以便您确切地知道哪个是lat,哪个是longCorrect,这就是回复的样子。检查我编辑的内容和建议,在我为你编写代码时给我一些时间。在我将PHP结果更改为include和#后,效果非常好。谢谢你@Joaquin PerazaLet us.请看:我的道歉@EJoshuaS
    <?php
$mysqli = new mysqli("localhost", "MYUSER", "MYPASS", "MYDB");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$query = "SELECT markers.lat, markers.lng
FROM markers
INNER JOIN userIds ON markers.user_id = userIds.user_id";

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
echo $row['lat'];
echo $row['lng'];
}
    /* free result set */
    $result->free();
}

/* close connection */
$mysqli->close();
?>
 @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    setUpMap();
}

    private void setUpMap() {
    LatLng sydney = new LatLng(-34, 151);
    LatLng spokane = new LatLng(-35, 171);
    LatLng idaho = new LatLng(-32.3, 150);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.addMarker(new MarkerOptions().position(spokane).title("Marker in spokane"));
    mMap.addMarker(new MarkerOptions().position(idaho).title("Marker in idaho"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
String answer = "-32.430412,-58.321323,#-32.430412,-58.321323,#-32.430412,-58.321323,#";
// note that line breaks disappeared after parsing it to string
String[] parts = answer.split("#");

for (String point : parts) {
String[] pointData = point.split(",");
Float lat= Float.parseFloat(pointData[0]);
Float lng= Float.parseFloat(pointData[1]);
/// check if fit your actual map, remember you need everything required here loaded and declared before calling.
  mMap.addMarker(new MarkerOptions()
    .position(new LatLng(lat, lng))
    .title("Hello world"));


}