有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为ProgressBar提供了一个解决方案。是否接受整数?

所以,我的应用程序崩溃是因为“java.lang.NumberFormatException:Invalid int:“216000000”,据我所知,最大可能的整数是2147483647。显然,它崩溃是因为我试图在ProgressBar上用一个太大的int设置进度

我的问题是:有没有解决办法? 整数之所以这么大,是因为我将天、小时和分钟转换为毫秒。 因此,当我输入任何大于24天20小时31分钟的值时,应用程序就会崩溃。(高于此值的任何内容都会创建一个太大的整数,setProgress无法接受。)

然而,我需要能够进入长达32天,但我找不到任何方法绕过这个限制参数倒计时。我在下面发布了一些代码以及一些LogCat错误,以获取补充信息

谢谢你们,伙计们


根据时间戳计算计时器应位于何处的方法:

public int bsCalculation()                     LINE # 138
    DateTime date = new DateTime();
    long currentTime = date.getMillis();

    long bsDiffInMillis;
    if(bsTimeStamp==0) {
        bsDiffInMillis = 0;
    }
    else {
        bsDiffInMillis = currentTime - bsTimeStamp;
        timeInputBs -= bsDiffInMillis;
    }


    int bsDiffInt = Integer.parseInt(String.valueOf(bsDiffInMillis));
    int roundedDiffBs = (bsDiffInt + 500) / 1000 * 1000;


    j += roundedDiffBs;

return j;
}

将输入从EditText转换为millis的方法:

public static Long getMillisForCrafting(long daysPh, long hoursPh, long minutesPh) {
                Locale.getDefault();
                DateTime bs = new DateTime();
                daysPulled = daysPh;
                hoursPulled = hoursPh;
                minutesPulled = minutesPh;

                final long nowInMillis = bs.getMillis();


                Long days = daysPulled * 86400000;
                Long hours = hoursPulled * 3600000;
                Long minutes = minutesPulled * 60000;
                Long millisToAddToNow = days + hours + minutes;
                Long futureDateInMillis = millisToAddToNow + nowInMillis;
                Long millisFromDate = futureDateInMillis - nowInMillis;

                return millisFromDate;
            }

原木猫:

E/AndroidRuntime(2283): FATAL EXCEPTION: main
E/AndroidRuntime(2283): java.lang.NumberFormatException: Invalid int: "2160000000"
E/AndroidRuntime(2283):     at java.lang.Integer.invalidInt(Integer.java:138)
E/AndroidRuntime(2283):     at java.lang.Integer.parse(Integer.java:378)
E/AndroidRuntime(2283):     at java.lang.Integer.parseInt(Integer.java:366)
E/AndroidRuntime(2283):     at java.lang.Integer.parseInt(Integer.java:332)
E/AndroidRuntime(2283):     at com.example.esomount.HomeActivity$bsTimer.onTick(HomeActivity.java:376)
E/AndroidRuntime(2283):     at 安卓.os.CountDownTimer$1.handleMessage(CountDownTimer.java:124)

共 (2) 个答案

  1. # 1 楼答案

    世界上没有理由每毫秒更新一次进度。拿毫秒时间戳除以几个数量级,得到一个小于int.maxSize()的int值

    更好的是,根据你期望进度条运行的时间,你可以把它分成100个部分,每个部分代表你总进度的1%。进度条的目的是以人类可以感知的尺度传达一段时间内的进度。世界上没有任何人能够每秒准确地感知1000次更新

  2. # 2 楼答案

    解决方法是使用ProgressBar从0缩放到100,如百分比,然后将时间进度转换为0到100之间的百分比