我正在寻找以下的最佳方式..
我有一个像这样的循环...
while(mcursor.moveToNext()){
String tname = mcursor.getString(4);
String tmessage = mcursor.getString(7);
String tlink = mcursor.getString(5);
String tsname = mcursor.getString(3);
Double tlat = mcursor.getDouble(1);
Double tlng = mcursor.getDouble(2);
}
对于循环的每个元素我想应用以下内容......
GeoPoint point = new GeoPoint(tlat,tlng);
OverlayItem overlayitem = new OverlayItem(point, tname, tmessage);
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
我该怎么做?答案很明显,但我自己也很困惑。
答案 0 :(得分:2)
像这样......
mcursor = getCursor(); //or whatever
if(mcursor != null && mcursor.moveToFirst())
{
do
{
String tname = mcursor.getString(1);
String tmessage = mcursor.getString(2);
String tlink = mcursor.getString(3);
String tsname = mcursor.getString(6);
Double tlat = mcursor.getDouble(2);
Double tlng = mcursor.getDouble(3);
GeoPoint point = new GeoPoint(tlat,tlng);
OverlayItem overlayitem = new OverlayItem(point, tname, tmessage);
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}while(mcursor.moveToNext());
}
答案 1 :(得分:2)
java使用对值的引用,这就是你的问题所在 正如@ st0le所指出的,你可以直接在循环中复制粘贴你的代码。
为什么我们这样做?因为调用GeoPoint point = new GeoPoint(tlat,tlng)
会更改point
中存储的引用而不是其值。 point
的原始值仍然存在,并且对它的引用已经过去了OverlayItem
构造函数。
while(mcursor.moveToNext()){
String tname = mcursor.getString(4);
String tmessage = mcursor.getString(7);
String tlink = mcursor.getString(5);
String tsname = mcursor.getString(3);
Double tlat = mcursor.getDouble(1);
Double tlng = mcursor.getDouble(2);
GeoPoint point = new GeoPoint(tlat,tlng);
OverlayItem overlayitem = new OverlayItem(point, tname, tmessage);
itemizedoverlay.addOverlay(overlayitem);
}
mapOverlays.add(itemizedoverlay);
并且你会想要在循环之外的最后一行,否则itemizedoverlay
将多次在mapOverlays
。只添加一次就足够了。在进入循环之前或之后。将项目添加到itemizedoverlay
会更改其值。之前对itemizedoverlay
的引用仍然相同,因此更改将立即显示在mapOverlays
中。
答案 2 :(得分:1)
对问题中的代码进行一些更正......
Double tlat = mcursor.getDouble(2); // should this be 4?
Double tlng = mcursor.getDouble(3); // should this be 5?
// You probably don't want to do this for every loop iteration ...
mapOverlays.add(itemizedoverlay);
答案 3 :(得分:1)
重组@ st0le的答案,将一起使用的数据分组在一起:
mcursor = getCursor(); //or whatever
if (mcursor != null && mcursor.moveToFirst()) {
do {
Double tlat = mcursor.getDouble(5);
Double tlng = mcursor.getDouble(6);
GeoPoint point = new GeoPoint(tlat,tlng);
String tname = mcursor.getString(1);
String tmessage = mcursor.getString(2);
OverlayItem overlayitem = new OverlayItem(point, tname, tmessage);
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
} while(mcursor.moveToNext());
}
这表明我们甚至没有使用tlink& tsname,所以我删除了它们。