[英]Java- HashMap.get returns null when it shouldn't
我正在使用HashMap將一些字符串鏈接為整數,然后將其用於索引列表。 我在.get()中使用的字符串從android旋轉器傳遞到方法,並且絕對正確,因為我將它們輸出到日志中,並且與HashMap中的字符串匹配。 但是,使用這些字符串之一調用.get將返回null,隨后在我嘗試在計算中使用null整數時導致應用程序強制關閉。
HashMap<String, Integer> valuesOfAngleUnits = new HashMap<String, Integer>();
public void setValuesOfAngleUnits(HashMap<String, Integer> valuesOfAngleUnits) {
valuesOfAngleUnits.put("Arc minute", 0);
valuesOfAngleUnits.put("Arc second", 1);
valuesOfAngleUnits.put("Degree", 2);
valuesOfAngleUnits.put("Gon", 3);
valuesOfAngleUnits.put("Grad", 4);
valuesOfAngleUnits.put("Mil (Nato)", 5);
valuesOfAngleUnits.put("Mil (Soviet Union)", 6);
valuesOfAngleUnits.put("Octant", 7);
valuesOfAngleUnits.put("Quadrant", 8);
valuesOfAngleUnits.put("Radian", 9);
valuesOfAngleUnits.put("Revolution", 10);
valuesOfAngleUnits.put("Sextant", 11);
valuesOfAngleUnits.put("Sign", 12);
valuesOfAngleUnits.put("Turn", 13);
}
List<Double> convertToArcSeconds = new ArrayList(Arrays.asList(1, 0.1666667, 0.000046, 0.0166667, 0.18519, 0.18519, 0.296296, 0.277778, 0.291667, 0.00037, 0.000185, 0.000291, 0.000046, 0.000278, 0.000556, 0.000046));
public void calculateConversion(String inputSpinner, String outputSpinner, Float userInput){
Float output = new Float(0.0);
String Tag = "Input collected";
Log.v(Tag, "The input data type is " + inputSpinner + ". The output data type is " + outputSpinner + ", and the user input is " + userInput);
Integer numericalValueOfInputSpinner = valuesOfAngleUnits.get(inputSpinner);
Log.v(Tag, "The numerical value of the spinner is " + numericalValueOfInputSpinner);
Float ArcSecondValue = new Float(userInput * convertToArcSeconds.get(numericalValueOfInputSpinner));
String Tag2 = "ArcSecondValueFound";
Log.v(Tag2, "The arc second value is " + ArcSecondValue);
}
上面的代碼設置了一個哈希表和一個列表,並向您顯示了所使用的方法。
06-22 21:23:34.113 3728-3728/? V/Input collected﹕ The input data type is Arc minute. The output data type is Arc minute, and the user input is 7645.0
06-22 21:23:34.113 3728-3728/? V/Input collected﹕ The numerical value of the spinner is null
06-22 21:23:34.113 3728-3728/? D/AndroidRuntime﹕ Shutting down VM
06-22 21:23:34.114 3728-3728/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.anapp.tpb.sidebarproject, PID: 3728
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
at com.anapp.tpb.sidebarproject.MainActivity.calculateConversion(MainActivity.java:78)
at com.anapp.tpb.sidebarproject.MainActivity$1.onClick(MainActivity.java:100)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
06-22 21:23:34.114 1224-1388/? W/ActivityManager﹕ Force finishing activity 1 com.anapp.tpb.sidebarproject/.MainActivity
上面是logcat輸出。 前兩行顯示正確的字符串以及浮點數已傳遞給方法。 但是,該數值為空。 我不明白為什么會這樣,因為字符串“ Arc minutes”在valuesOfAngleUnits HashMap中。
任何幫助表示贊賞。
這看起來像問題:
HashMap<String, Integer> valuesOfAngleUnits = new HashMap<String, Integer>();
public void setValuesOfAngleUnits(HashMap<String, Integer> valuesOfAngleUnits) {
valuesOfAngleUnits.put("Arc minute", 0);
valuesOfAngleUnits.put("Arc second", 1);
valuesOfAngleUnits.put("Degree", 2);
valuesOfAngleUnits.put("Gon", 3);
valuesOfAngleUnits.put("Grad", 4);
valuesOfAngleUnits.put("Mil (Nato)", 5);
valuesOfAngleUnits.put("Mil (Soviet Union)", 6);
valuesOfAngleUnits.put("Octant", 7);
valuesOfAngleUnits.put("Quadrant", 8);
valuesOfAngleUnits.put("Radian", 9);
valuesOfAngleUnits.put("Revolution", 10);
valuesOfAngleUnits.put("Sextant", 11);
valuesOfAngleUnits.put("Sign", 12);
valuesOfAngleUnits.put("Turn", 13);
}
您正在初始化傳遞給該方法的本地HashMap,它可能與具有相同名稱的實例變量不同。
將其更改為:
public void setValuesOfAngleUnits() {
valuesOfAngleUnits.put("Arc minute", 0);
valuesOfAngleUnits.put("Arc second", 1);
valuesOfAngleUnits.put("Degree", 2);
valuesOfAngleUnits.put("Gon", 3);
valuesOfAngleUnits.put("Grad", 4);
valuesOfAngleUnits.put("Mil (Nato)", 5);
valuesOfAngleUnits.put("Mil (Soviet Union)", 6);
valuesOfAngleUnits.put("Octant", 7);
valuesOfAngleUnits.put("Quadrant", 8);
valuesOfAngleUnits.put("Radian", 9);
valuesOfAngleUnits.put("Revolution", 10);
valuesOfAngleUnits.put("Sextant", 11);
valuesOfAngleUnits.put("Sign", 12);
valuesOfAngleUnits.put("Turn", 13);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.