簡體   English   中英

哈希表 <String,Object> 返回null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM