首页 > 解决方案 > App crashes with "java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 " only on real device

问题描述

I was programming a function which is replacing for example 1000 for 1K and so on. I dont want to show "00" after the dot, so I split the variable and if the second part equals "00" it shows only the first part.

This work just as intended on the emulator running Android 10. On my real device (P4XL, Android 10) it crashes with the line shown in the title.

I know that this function is the reason for the crash, because when I comment it out it works on my real device as well, just without the numbers beiing displayed correctly.

Why is it doing this?

public String number_uppercase(int input){
    double input_double = (double) input;
    if (input < 1000){
        number_uppercase_cache = df.format(input_double);
        number_uppercase_ending = "";
    }
    if (input >= 1000 && input < 1000000){
        number_uppercase_cache = df.format(input_double/1000);
        number_uppercase_ending = " K";
    }
    if (input >= 1000000 && input < 1000000000){
        number_uppercase_cache = df.format(input_double/1000000);
        number_uppercase_ending = " mio";
    }
    if (input >= 1000000000){
        number_uppercase_cache = df.format(input_double/1000000000);
        number_uppercase_ending = " mrd";
    }

    number_uppercase_split_part_1 = number_uppercase_cache.split("\\.")[0];
    number_uppercase_split_part_2 = number_uppercase_cache.split("\\.")[1];

    if(number_uppercase_split_part_2.equals("00")){
        number_uppercase_output = number_uppercase_split_part_1 + number_uppercase_ending;
    } else {
        number_uppercase_output = number_uppercase_split_part_1 + "." + number_uppercase_split_part_2 + number_uppercase_ending;
    }
    return number_uppercase_output;
}

标签: androidvariablessplitandroid-emulator

解决方案


Please give a try to below function which will serve your purpose

private String formatNumber(long _number) {
    if (_number< 1000) 
        return "" + _number ;
    else
    int exp = (int) (Math.log(_number) / Math.log(1000));
    return String.format("%.1f %c", _number/ Math.pow(1000, exp), "kMGTPE".charAt(exp-1));
}

推荐阅读