为什么我在尝试从Android中的字符串解析整数时遇到NumberFormatException?

时间:2012-12-11 05:16:45

标签: java android parseint numberformatexception

我正在寻找基于自定义ROM的工具的更新功能。我使用此代码http://www.androidsnippets.com/check-for-updates-once-a-day作为基础,很快意识到我无法使用Dropbox进行部署。所以我修改了代码以从dropbox下载version.txt文件。该文件包含一个数字(最新版本代码,在本例中为11)。我需要读取该行并将字符串解析为整数以与当前versionCode进行比较,并在存在更新时触发下载。 除了从txt文件解析int之外,所有代码都有效。

继承我的代码:

    private Thread checkUpdate = new Thread() {
public void run() {
    try {

        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard,"BPversion.txt");
        StringBuilder text = new StringBuilder();
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while ((line = br.readLine()) != null) {
            text.append(line);

        int curVersion = getPackageManager().getPackageInfo("com.JB15613.BPcolorTool", 0).versionCode;
        System.out.println(line);
        int newVersion = 0;
        System.out.println(line);

        try {
            newVersion = Integer.parseInt(line);
            System.out.println(line);
        } catch(NumberFormatException nfe) {
            System.out.println("Exception " + nfe);
        }

        if (newVersion > curVersion) {
            mHandler.post(showUpdate);
        }    
        }
    } catch (Exception e) {
        Log.d("ANDRO_ASYNC", "Caught exception");

    }
}

我得到了这个例外:

    Exception java.lang.NumberFormatException: Invalid int: "11"

当我应用断点并运行调试器时,它会在parseInt行崩溃。

11对我来说看起来像一个有效的int!

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

行结束CRLF,因此,需要在String中调用函数trim()..

int newVersion = Integer.parseInt(line.trim());

答案 1 :(得分:0)

我只想补充已经陈述的内容:

你的问题是你的11无法解析为int,其根本原因是你正在解析空格作为字符串的一部分。

如前所述,trim()方法应该删除问题,但如果你想知道导致问题的原因以及为什么要修复它,那就是原因。

你不是要解析" 11",你正在解析类似" 11"或" 11"这是另一回事。您正在读取的文件中的空格将被包含在您的字符串中,因为它将传递给parseInt方法。

同样,我知道这已得到回答,但我认为这些额外的信息仍然有用。

答案 2 :(得分:-1)


尝试在logcat或屏幕或ui中打印line的值。
检查将会发生什么。有效的int即将到来或任何其他即将到来。 我认为行不能保证有效的int。

 Exception java.lang.NumberFormatException


由于int格式或数字格式无效而引发上述异常。
检查线的值