java - 如何从数据库 Arraylist 在 Google map 上添加标记

标签 java android google-maps android-studio arraylist

我不知道如何从数据库中的 Arraylist 在 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 map 应显示数据库中纬度和经度的所有标记

最佳答案

假设您的 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: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference

这是因为您正在尝试获取 userList 中不存在的“纬度”和“经度”。尝试将它们替换为“Lat”和“Long”,如下所示:

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

我用上述更改测试了您的代码,两个样本标记在我的 map 上都显示正常,所以我希望这对您有所帮助!

关于java - 如何从数据库 Arraylist 在 Google map 上添加标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583683/

相关文章:

java - paintComponent 有时只调用

java - jsf- "Cannot find component with expression"

android - 从底部动画 RecyclerView 添加

android - 谷歌方向和语音导航

java - HttpURLConnection POST 请求抛出 IOException

java - 为什么Java允许我们编译一个名称与文件名不同的类?

android - 在两个 fragment 之间传递数据类

android - 覆盖退出沉浸式 View 系统手势使用的系统 UI 可见性标志

javascript - 带有 JSP 的 Google map 上的多个标记

php - 点击 Google map 上的 HTML 表单