2

我正在寻找基于自定义 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 !

任何帮助是极大的赞赏!

4

3 回答 3

4

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

int newVersion = Integer.parseInt(line.trim());
于 2012-12-11T05:25:10.333 回答
0

我只想补充已经说明的内容:

您的问题是您的 11 无法解析为 int,其根本原因是您将空格作为字符串的一部分进行解析。

如前所述, trim() 方法应该可以解决问题,但是如果您想知道是什么导致了问题以及为什么要修复它,那么这就是原因。

您不是在尝试解析“11”,而是在解析诸如“11”或“11”之类的东西,这是另一回事。您正在读取的文件中的空格被包含在您的字符串中,因为它被传递到 parseInt 方法中。

同样,我知道这已得到解答,但我认为这些附加信息仍然有用。

于 2015-12-11T11:34:24.210 回答
-1


尝试在 logcat 或 screen 或 ui 中打印 line 的值。
检查将会发生什么。一个有效的 int 即将到来或任何其他的即将到来。
我认为行不包含有效的 int。

 Exception java.lang.NumberFormatException


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

于 2012-12-11T06:01:09.337 回答