我已经尝试了很长一段时间,终于到了我的大脑不知道该做什么的地步。我成功地从数据库中读取了数据,并尝试使用Queries将其添加到地图中,然而,这并没有奏效。我现在所做的是将数据排序到一个数组列表中,我可以在其中循环,然后添加它——也许这种方法会奏效,但仍然没有成功。如果有人能帮助我或提供不同的解决方案,我将非常感激!
我在onCreate函数中调用QueryDatabase()函数。
我创建了ArrayList。第一个是我将其他人加入的主要价值观,第二个是我需要的价值观。几乎就像它被打包到一个数组中。
private static ArrayList<MarkerOptions> MarkerArray = new ArrayList<MarkerOptions>(); private static ArrayList<ArrayList<String>> PackagedMarkerData = new ArrayList<>();
在这个函数中,我从一个名为“getDataArray”的数组中获取所需的数据,并将其放入局部变量中(这个函数的第1部分)
private void QueryDatabase(){ int lengthOfArray = DebugLog.getDataArray.size(); try { for (int i = 0; i < DebugLog.getDataArray.size(); i += 6) { System.out.println("Crime: " + DebugLog.getDataArray.get(i)); System.out.println("Location: " + DebugLog.getDataArray.get(i + 1)); System.out.println("Longitude: " + DebugLog.getDataArray.get(i + 2)); System.out.println("Latitude: " + DebugLog.getDataArray.get(i + 3)); System.out.println("Outcome: " + DebugLog.getDataArray.get(i + 4)); try { String Crime = DebugLog.getDataArray.get(i); String Location = DebugLog.getDataArray.get(i + 1); String Longitude = DebugLog.getDataArray.get(i + 2); String Latitdude = DebugLog.getDataArray.get(i + 3); // LatLng LocationMarker = new LatLng(Latitdude, Longitude); addMarker(Latitdude, Longitude, Crime, Location); } catch (Exception e){ Toast.makeText(getApplicationContext(),"UnExpected Error", Toast.LENGTH_LONG).show(); } } } catch (Exception e) { Toast.makeText(getApplicationContext(),"UnExpected Error", Toast.LENGTH_LONG).show(); } ...
本地变量(犯罪、位置、经度…)被解析到下一个函数,该函数将数据打包到本地ArrayList中,然后将其添加到主ArrayList(在顶部声明)
private void addMarker(String Lat, String Long, String title, String Location) { ArrayList<String> PackData = new ArrayList<String>(); PackData.add(title); PackData.add(Location); PackData.add(Long); PackData.add(Lat); PackagedMarkerData.add(PackData); System.out.println(PackagedMarkerData.size()); }
数据在ArrayList中(成为2D阵列)后,Im循环通过它并添加到地图(mMap)。我已经执行了system.out.println命令来检查数组是否已填充,并且它们已填充,主要问题是它没有添加到映射中,这是我希望解决的问题。下面的代码是上面函数的第2部分。
... for (int counter = 0; counter < PackagedMarkerData.size(); counter ++){ try{ for (int dataCounter = 0; dataCounter < 50; dataCounter++){ MarkerOptions markerOptions = new MarkerOptions(); LatLng LocationData = new LatLng(Double.parseDouble(PackagedMarkerData.get(counter).get(3)), Double.parseDouble(PackagedMarkerData.get(counter).get(2))); markerOptions .title(PackagedMarkerData.get(counter).get(0)) .snippet(PackagedMarkerData.get(counter).get(1)) .position(LocationData); mMap.addMarker(markerOptions); } } catch (Exception e){ Toast.makeText(getApplicationContext(),"UnExpected Error", Toast.LENGTH_LONG).show(); } }
这是完整的代码。我希望有人能帮忙解决这个问题!
private static ArrayList<MarkerOptions> MarkerArray = new ArrayList<MarkerOptions>(); private static ArrayList<ArrayList<String>> PackagedMarkerData = new ArrayList<>();
private void QueryDatabase(){ int lengthOfArray = DebugLog.getDataArray.size(); try { for (int i = 0; i < DebugLog.getDataArray.size(); i += 6) { System.out.println("Crime: " + DebugLog.getDataArray.get(i)); System.out.println("Location: " + DebugLog.getDataArray.get(i + 1)); System.out.println("Longitude: " + DebugLog.getDataArray.get(i + 2)); System.out.println("Latitude: " + DebugLog.getDataArray.get(i + 3)); System.out.println("Outcome: " + DebugLog.getDataArray.get(i + 4)); try { String Crime = DebugLog.getDataArray.get(i); String Location = DebugLog.getDataArray.get(i + 1); String Longitude = DebugLog.getDataArray.get(i + 2); String Latitdude = DebugLog.getDataArray.get(i + 3); // LatLng LocationMarker = new LatLng(Latitdude, Longitude); addMarker(Latitdude, Longitude, Crime, Location); } catch (Exception e){ Toast.makeText(getApplicationContext(),"UnExpected Error", Toast.LENGTH_LONG).show(); } } } catch (Exception e) { Toast.makeText(getApplicationContext(),"UnExpected Error", Toast.LENGTH_LONG).show(); } for (int counter = 0; counter < PackagedMarkerData.size(); counter ++){ try{ for (int dataCounter = 0; dataCounter < 50; dataCounter++){ MarkerOptions markerOptions = new MarkerOptions(); LatLng LocationData = new LatLng(Double.parseDouble(PackagedMarkerData.get(counter).get(3)), Double.parseDouble(PackagedMarkerData.get(counter).get(2))); markerOptions .title(PackagedMarkerData.get(counter).get(0)) .snippet(PackagedMarkerData.get(counter).get(1)) .position(LocationData); mMap.addMarker(markerOptions); } } catch (Exception e){ Toast.makeText(getApplicationContext(),"UnExpected Error", Toast.LENGTH_LONG).show(); } } } private void addMarker(String Lat, String Long, String title, String Location) { ArrayList<String> PackData = new ArrayList<String>(); PackData.add(title); PackData.add(Location); PackData.add(Long); PackData.add(Lat); PackagedMarkerData.add(PackData); System.out.println(PackagedMarkerData.size()); }