我不知道如何从数据库的数组列表在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)));
}
谷歌地图应显示数据库中的所有纬度和经度标记
假设您的userList
列表在打印时以以下格式包含您的位置:
Log.d("userListTag", userList.toString())
输出:
userListTag: [{Loc=California, Long=-117.985904, Lat=35.125801}, {Loc=Las Vegas, Long=-115.13983, Lat=36.169941}]
当我运行你的代码时,我得到了这个错误:
java.lang.NullPointerException:尝试调用虚拟方法null对象上的"java.lang.String java.lang.SString.toString(("参考
这是因为您正在尝试获取"纬度"one_answers"经度",它们在userList
中不作为键存在。试着用"Lat"one_answers"Long"代替它们,如下所示:
latitude = Double.parseDouble(userList.get(i).get("Lat").toString());
longitude = Double.parseDouble(userList.get(i).get("Long").toString());
我用上面的修改测试了你的代码,两个样本标记在我的地图上都显示得很好,所以我希望这能帮助你!