簡體   English   中英

Java HashMap.get不應返回null

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

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