39

私は過去 2 時間かけて、非常にありそうもないことをデバッグしてきました。2 番目の Android アクティビティのメソッドを次のように削除しました。

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

そして、ええ、古き良き NullPointerException でクラッシュします。

09-11 02:02:50.444: エラー/AndroidRuntime(1588): キャッチされていないハンドラー: キャッチされていない例外が原因でスレッド メインが終了します 09-11 02:02:50.464: エラー/AndroidRuntime(1588): java.lang.NullPointerException

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

前もって感謝します。ばかげて明らかなことを見逃しても大丈夫ですが、私の正気は危機に瀕しています。

4

5 に答える 5

118

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

于 2011-09-11T08:28:34.227 に答える
11

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

于 2011-09-11T07:20:47.337 に答える
7

間違った関数 use Long.parseLong(str)を使用していると思います。正しい答えを得ることができます。

于 2011-09-11T07:24:08.350 に答える
7

Long.parseLong(someString) approved. Don't forget to catch NumberFormatException if there's a probability of unparsable string.

于 2011-09-11T07:53:18.763 に答える
5

これを理解するために、いくつかの例を示します。

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;
        }
    }

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

于 2016-05-12T18:22:11.617 に答える