web-dev-qa-db-ja.com

Long.getLong()が失敗し、有効な文字列にnullを返します

非常にありそうもないことをデバッグするために、過去2時間を費やしました。私はセカンダリのメソッドを削除しましたAndroid Activity to just this:

public void onClick(View v) {
        String str = "25";
        long my_long = Long.getLong(str);
} // onClick (v)

そしてええ、私は良い旧式のNullPointerExceptionでクラッシュします:

09-11 02:02:50.444:ERROR/AndroidRuntime(1588):キャッチされないハンドラー:キャッチされない例外のためにスレッドのメインが終了します09-11 02:02:50.464:ERROR/AndroidRuntime(1588):Java.lang.NullPointerException

(他のテストから)Long.getLong(str)がNULLを返すように見えます。何が欠けていますか?

前もって感謝します。私はあからさまに明白なものを逃しても大丈夫ですが、私の正気は線にあります。

33
Scott Biggs

Long.getLong(String str)が文字列をlongに解析するのではなく、その文字列で表されるシステムプロパティのlong値を返すことになっているという事実を見逃しています。他の人が示唆しているように、実際に必要なのはLong.parseLong(String str)です。

100
MeLight

Long.parseLong(String)の代わりにgetLong(String)を使用できます。これにより問題が解決します。

11
confucius

Long.parseLong(someString)が承認されました。解析できない文字列の可能性がある場合は、NumberFormatExceptionをキャッチすることを忘れないでください。

7
Y.A.P.

私はあなたが間違った関数を使用していると思いますLong.parseLong(str)そうすれば正しい答えを得ることができます。

7
Android Killer

これを理解するために、いくつかの例:

Long val= Long.getLong("32340");

戻り値:null

Long val = Long.getLong("32340", 3000);

戻り値: 3000

Long.parseLong()の使用:

Long val  = Long.parseLong("32340");

戻り値: 32340

ドキュメントは getLong() メソッドを次のように説明しています:

文字列で識別されるシステムプロパティのLong値を返します。

これはgetLong()メソッドのコードであり、文字列で定義されたプロパティ値のみを取得します。

  public static Long getLong(String string) {
        if (string == null || string.length() == 0) {
            return null;
        }
        String prop = System.getProperty(string);
        if (prop == null) {
            return null;
        }
        try {
            return decode(prop);
        } catch (NumberFormatException ex) {
            return null;
        }
    }

文字列をLongに解析したい場合、最善の方法はLong.parseLong()メソッドを使用することです。

4
Jorgesys