我由哈希表,其中鍵(ID)是一個字符串,值是一個對象,哈希表<字符串,對象>返回null
public void addSpot(String id) {
Spot spot = new Spot(id);
SpotMap.addSpot(id, spot); // adds spot to table
spot.getMarkerOptions().position(new LatLng(28, 30));
spot.addMark(map); // adds mark to map
Log.i("SPOT_TABLE", SpotMap.getSize());
}
public void removeSpot(String id) {
try{
Spot spot=SpotMap.getSpotMap().get(id);
spot.removeMark(spot.getMarker());
SpotMap.removeSpot(id);
Log.i("SPOT_TABLE", SpotMap.getSize());}
catch(Exception e){}
}
這是SpotMap類
package com.example.myapp;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import android.util.Log;
import com.example.myapp.Spot;
public class SpotMap {
private static Hashtable<String, Spot> spotMap = new Hashtable();
public static Hashtable<String, Spot> getSpotMap() {
return spotMap;
}
// public static void setMarkermap(Hashtable<String, Spot> markermap) {
// MarkerMap.markerMap = markermap;
// }
public static void addSpot(String id, Spot spot) {
spotMap.put(id, spot);
}
public static void removeSpot(String id) {
spotMap.remove(id); // removes spot from table
}
public static void printTable(){
Enumeration key = spotMap.keys();
while (key.hasMoreElements()) {
System.out.println(spotMap.get(key.nextElement()));
}
}
}
的現貨類
package com.example.myapp;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Marker;
public class Spot {
private String id;
private MarkerOptions markerOptions;
private Marker marker;
public Spot(String id) {
this.id = id;
markerOptions = new MarkerOptions();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setMarkerOptions(MarkerOptions markerOptions) {
this.markerOptions = markerOptions;
}
public void addMark(GoogleMap map) {
marker = map.addMarker(markerOptions);
}
public void removeMark(Marker marker) {
marker.remove();
}
public MarkerOptions getMarkerOptions() {
return markerOptions;
}
public void setMarker(Marker marker) {
this.marker = marker;
}
public Marker getMarker() {
return marker;
}
/*
* public Spot getSpot() { return this; }
*/
public String toString(){
return id;
}
}
應用效果很好,當我加1點,並刪除它,但是當我連續加2點(有相同的ID),並調用重移動功能,我得到NullPointException,並沒有刪除標記 logcat的
01-23 10:10:36.698: I/SPOT_TABLE(5209): 1
01-23 10:10:38.518: I/SPOT_TABLE(5209): 0
01-23 10:10:40.098: I/SPOT_TABLE(5209): 1
01-23 10:10:40.718: I/SPOT_TABLE(5209): 1
01-23 10:10:41.748: I/SPOT_TABLE(5209): 1
01-23 10:10:42.638: I/SPOT_TABLE(5209): 0
01-23 10:10:44.488: I/SPOT_TABLE(5209): 1
01-23 10:10:45.048: I/SPOT_TABLE(5209): 0
01-23 10:10:48.628: I/SPOT_TABLE(5209): 1
01-23 10:10:48.938: I/SPOT_TABLE(5209): 1
01-23 10:10:49.368: I/SPOT_TABLE(5209): 1
01-23 10:10:49.448: I/SPOT_TABLE(5209): 1
01-23 10:10:49.708: I/SPOT_TABLE(5209): 1
01-23 10:10:50.678: I/SPOT_TABLE(5209): 1
01-23 10:10:50.938: I/SPOT_TABLE(5209): 0
的logcat的打印哈希表的大小,你可以看到,添加相同的密鑰替換舊像往常一樣,也刪除按鈕似乎工作...但現在我認爲這是一個標記問題
空的抓塊是萬惡之源。 –
步驟1將不會吞下您的方法中可能出現的異常,但至少需要打印堆棧跟蹤。 – Keppil
你的意思是說,你添加了兩個相同的ID點,你試圖刪除兩個?在這種情況下,只有最後一個點將出現在HashTable中,因爲在HashTable中不能有兩個具有相同鍵的對象。 – sthor69