2013-04-08 25 views
6

Mam metodę w klasie, która inicjuje HashMap i umieszcza w niej pewne klucze i wartości, a następnie metoda zwraca HashMap. Jak mogę odzyskać zwróconą mapę HashMap?Metoda zwracana przez HashMap

public Map<String, String> getSensorValue(String sensorName) { 

registerSensor(sensorName); 
sensorValues.put("x","25"); 
sensorValues.put("y","26"); 
sensorValues.put("z","27"); 
return sensorValues; 
} 

I tu wywołanie tej metody z innej klasy:

public static HashMap<String, String> sensValues = new HashMap<String, String>(); 

AllSensors sensVal = new AllSensors(); 
sensValues.putAll(sensVal.getSensorValue("orientation")); 
String something = sensValues.get("x"); 

Ale to nie działa w ten sposób

sensValues.putAll(sensVal.getSensorValue("orientation")); 

sprawia, że ​​moja android awarii aplikacji. Chodzi o to, aby jakoś zwrócić zwróconą stronę HashMap.

+0

Czy można sprawdzić swoją logcat? – Zyerah

+1

opublikuj swój wyjątek (możesz go znaleźć w wynikach logcat w Eclipse) – Dodge

Odpowiedz

12

Nie powinieneś kopiować mapy. Wystarczy spróbować użyć wracającą odniesienie:

Map<String, String> map = sensVal.getSensorValue("..."); 
5

Twoja metoda musi zwrócić Map<String,String>. W opublikowanym przez Ciebie kodzie wartości czujników Map nigdy nie są inicjowane.

public Map<String, String> getSensorValue(String sensorName) { 
    Map<String,String> sensorValues = new HashMap<String,String>(); 
    registerSensor(sensorName); 
    sensorValues.put("x","25"); 
    sensorValues.put("y","26"); 
    sensorValues.put("z","27"); 
    return sensorValues; 
} 
0

HashMap sensValues ​​= new HashMap(); Ustaw mapSet = (Set) sensValues.entrySet();

Iterator mapIterator = mapSet.iterator();

  while (mapIterator.hasNext()) { 
        Map.Entry mapEntry = (Map.Entry) mapIterator.next(); 
        String keyValue = (String) mapEntry.getKey(); 
        String value = (String) mapEntry.getValue(); 
        System.out.println("Key : " + keyValue + "= Value : " + value); 
      } 
4

Prawie jak Rich powiedział w swojej odpowiedzi, ale metoda zwraca Map które nie mogą być odlewane do HashMap. Spróbuj tego

Map<String, String> map = sensVal.getSensorValue("..."); 

Lub alternatywnie zmienić metodę getSensorValue tak, że zwraca HashMap

0

Ponadto można spróbować przejść przez aproach odniesienia

void main(){ 

    public static HashMap<String, String> sensValues = new HashMap<String, String>(); 

    AllSensors sensVal = new AllSensors(); 

    sensVal.setSensorValue(sensValues ,"orientation"); 

    String something = sensValues.get("x"); 
} 

    public void setSensorValue(Map<String, String> sensorValues, String sensorName) { 

     registerSensor(sensorName); 

     sensorValues.put("x","25"); 

     sensorValues.put("y","26"); 

     sensorValues.put("z","27"); 

    } 
Powiązane problemy