非常にありそうもないことをデバッグするために、過去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を返すように見えます。何が欠けていますか?
前もって感謝します。私はあからさまに明白なものを逃しても大丈夫ですが、私の正気は線にあります。
Long.getLong(String str)
が文字列をlongに解析するのではなく、その文字列で表されるシステムプロパティのlong値を返すことになっているという事実を見逃しています。他の人が示唆しているように、実際に必要なのはLong.parseLong(String str)
です。
Long.parseLong(String)
の代わりにgetLong(String)
を使用できます。これにより問題が解決します。
Long.parseLong(someString)が承認されました。解析できない文字列の可能性がある場合は、NumberFormatExceptionをキャッチすることを忘れないでください。
私はあなたが間違った関数を使用していると思いますLong.parseLong(str)そうすれば正しい答えを得ることができます。
これを理解するために、いくつかの例:
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;
}
}