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で終了するため、文字列で関数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が来るか、他のものが来るでしょう。 lineには有効なintが含まれていない
と思います。

 Exception java.lang.NumberFormatException


上記の例外は、無効なint形式または数値形式が原因でスローされます。
行の値を確認してください

于 2012-12-11T06:01:09.337 に答える