web-dev-qa-db-ja.com

Androidでassertを使用する方法は?

assert obj != null : "object cannot be null" on Android device。を使用したい。アサートは機能していないようだ。だからオンラインで検索したところ、このローカルソリューションが見つかりました。

adbシェルsetprop debug.assert 1

それは私のローカルマシンで動作します。

Eclipseプロジェクトを使用してこのコマンドを実行したいので(ソース管理になります)。どうすればいいですか?

ありがとう!

70
Adibe7

アサートは、Androidでは動作しません。なぜなら、ほとんどの場合、デバッグモードで実行されているのではなく、最適化されたコードです。したがって、適切な解決策は、このようなコード:

if (obj==null) throw new AssertionError("Object cannot be null");

設計上、アサートはデバッグコード用であり、リリース時コード用ではないことに注意してください。したがって、これはAssertをスローする最適な使用法ではないかもしれません。しかし、これはまだあなたがそれを行うことができる方法ですので、...

77
PearsonArtPhoto

テスト済みAndroid 4.xデバイス、Java assert on Androidデバイス:

  • /system/build.propを編集し(たとえば X-plore を使用)、ファイルの最後に行を追加します:debug.assert = 1
  • 電話を再起動

これで、Androidデバイスはチェックをアサートするのが賢明であり、アサートチェックが失敗するとAssertionErrorをスローします。

編集:

デバイスが再起動されるまでPCからアサートを有効にする別の簡単なアプローチ:

platform-tools\adb Shell setprop debug.assert 1

たとえば、Windowsで.batファイルを作成し、デバイスが接続されたときにそれを実行できます。

13
Pointer Null

独自のassertメソッドを作成します。

public static <T> T assertNotNull(T object) {
    if (object == null)
        throw new AssertionError("Object cannot be null");
    return object;
}

同じオブジェクトを返すと、簡潔にするために割り当てでこれを使用できます。

9
Paweł Nadolski

if (somevar == null) throw new RuntimeException();

RuntimeException()を適切な例外サブタイプに置き換えます。

6
mah

Androidでアサーションに使用するクラスを共有することは、よりシンプルで、次のようなアサーションを記述できるため、素敵な名前付けと非常にエレガントです。

Assert.that(obj!=null, "Object should not be null");

クラスのコードは次のとおりです。

public class Assert {
    public static void that(boolean condition, String message) {
        if (!condition) {
            throw new AssertionError(message);
        }
    }
}

それが役に立てば幸い!

2
Bitonator

Java仮想マシン、-enableassertionsまたは---でアサーションを使用可能にするにはeaコマンドラインオプション

  • windowのコマンドプロンプト、

    Java –ea YourApp

  • on Android Studio 3.0、on ツール/構成の編集/ VMオプション、入力-enableassertionsまたは-ea
1
Shuyan Ji