我已经尝试了很长一段时间,终于到了我的大脑不知道该做什么的地步。我成功地从数据库中读取了数据,并尝试使用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());
}