[英]Hashtable <String,Object> returning null
我制作了一個Hashtable,其中key(id)是一個字符串,值是一個object,
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)並調用remove函數時,我得到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會打印Hashtable的大小,如您所見,添加相同的鍵將照常替換舊的鍵,並且刪除按鈕似乎也可以工作……但是現在我認為這是一個標記問題
我的猜測是,當您嘗試第二次添加Marker
時, addMarker()
方法返回null
。
這將使您的marker
實例變量變為null
,在removeSpot()
方法中提供NullPointerException
。
現在可以正常工作了,我不得不編輯addSpot函數,在插入新的小腸之前刪除舊的小腸,但是直到現在,我都不知道為什么
spot.removeMark(spot.getMarker());
工作不正常
public void addSpot(String id) {
Spot spot = new Spot(id);
if (SpotMap.getSpotMap().containsKey(id)) {
removeSpot(id);
}
spot.getMarkerOptions().position(new LatLng(28, 30));
SpotMap.addSpot(id, spot); // adds spot to table
spot.addMark(map); // adds mark to map
Log.i("SPOT_TABLE", SpotMap.getSize());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.