如何从数据库数组列表在 Google 地图上添加标记

我不知道如何从数据库中的数组列表在 GoogleMaps 上添加标记。


我已经尝试了很多但没有任何效果。


来自数据库的数组列表:


public ArrayList<HashMap<String, String>> GetUserByUserId(int userid){

    SQLiteDatabase db = this.getWritableDatabase();

    ArrayList<HashMap<String, String>> userList = new ArrayList<>();

    String query = "SELECT Loc, Lat, Long FROM "+ TABLE_Users;

    Cursor cursor = db.query(TABLE_Users, new String[]{LocationName, Latitude, Longitude}, KEY_ID+ "=?",new String[]{String.valueOf(userid)},null, null, null, null);

    if (cursor.moveToNext()){

        HashMap<String,String> user = new HashMap<>();

        user.put("Loc",cursor.getString(cursor.getColumnIndex(LocationName)));

        user.put("Lat",cursor.getString(cursor.getColumnIndex(Latitude)));

        user.put("Long",cursor.getString(cursor.getColumnIndex(Longitude)));

        userList.add(user);

    }

    return  userList;

}

我的尝试


@Override

public void onMapReady(GoogleMap googleMap) {

    Database db = new Database(this);

    ArrayList<HashMap<String, String>> userList = db.GetUsers();

    mMap = googleMap;

    double latitude = 0;

    double longitude = 0;

    for (int i = 0; i < userList.size(); i++) {

        latitude = Double.parseDouble(userList.get(i).get("latitude").toString());

        longitude = Double.parseDouble(userList.get(i).get("longitude").toString());

        mMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)));

    }

Google 地图应显示数据库中纬度和经度的所有标记


皈依舞
浏览 92回答 1
1回答

一只甜甜圈

假设您的userList列表在打印时包含以下格式的位置:Log.d("userListTag",&nbsp;userList.toString())输出:userListTag:&nbsp;[{Loc=California,&nbsp;Long=-117.985904,&nbsp;Lat=35.125801},&nbsp;{Loc=Las&nbsp;Vegas,&nbsp;Long=-115.13983,&nbsp;Lat=36.169941}]当我运行你的代码时,我收到此错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.String.toString()”这是因为您试图获取“纬度”和“经度”,它们在userList.&nbsp;尝试用“Lat”和“Long”替换它们,如下所示:latitude&nbsp;=&nbsp;Double.parseDouble(userList.get(i).get("Lat").toString()); longitude&nbsp;=&nbsp;Double.parseDouble(userList.get(i).get("Long").toString());我用上述更改测试了您的代码,两个示例标记在我的地图上都显示良好,所以我希望这对您有帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java