Androidのいくつかのよくある異常で無視されやすい場所


一、空ポインタ異常
    private String str;
    
    private void initView() {
        int a = str.length();
        Log.e("zpan","=========" + a);
    }
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' 
            on a null object reference
            at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:28)

空ポインタ異常は「.」に違いない.前の変数は空です.これは比較的調べやすい.
空のポインタはCrashで最もよく見られるもので、最も無視されやすいもので、バックグラウンドがデータを空に戻すシーンは、防ぐことができません.空になる可能性があるデータであれば、使用する前に空の判定処理をして、崩壊の確率を減らすことが望ましいです.コード実行順のシーンもあり、まだ値を付けていないのに使用したり、ポインタを空にしたりするに違いありません.
方案:防護活動をしっかりと行い、論理的に整理して崩壊の発生を減らす.
二、タイプ変換異常
String str = "";
int a = Integer.valueOf(str);
 Caused by: java.lang.NumberFormatException: Invalid int: ""
            at java.lang.Integer.invalidInt(Integer.java:138)
            at java.lang.Integer.parseInt(Integer.java:358)
            at java.lang.Integer.parseInt(Integer.java:334)
            at java.lang.Integer.valueOf(Integer.java:525)
            at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:26)

APIから送信されたデータのタイプ変換が必要な場合があります.APIから送信されたデータが空ではないことを保証することはできません.このようなシーンを無視すると、私たちを待っているのはCrashです.
≪スキーマ|Schema|ldap≫:タイプ変換に対してタイプ安全変換の関数を書きます.つまり、データが空の場合、デフォルト値を返します.
    private void initView() {
        String str = "";
        int a = String2Int(str, 0);
        Log.e("zpan","=========" + a);
    }

    private int String2Int(String str, int defaulValue) {
        if (TextUtils.isEmpty(str)) {
            return defaulValue;
        }
        try {
            return Integer.valueOf(str);
        } catch (Exception e) {
            return defaulValue;
        }
    }

関数をUtilsクラスに配置して多重化します.同様に、long、double、Stringなどのタイプの転化は、このように防護し、崩壊を減らすことができます.
三、下付き境界を越える
    private String str = "abc";

    private void initView() {
        String a = str.substring(3,6);
        Log.e("zpan","=========" + a);
    }
Caused by: java.lang.StringIndexOutOfBoundsException: length=3; regionStart=3; regionLength=3
           at java.lang.String.startEndAndLength(String.java:298)
           at java.lang.String.substring(String.java:1087)
           at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:28)

値が自分の長さを超えると、境界異常を報告します.APIがデータを転送する場合,文字列を二次処理する場合,文字列の値が境界を越えるシーンがあるかどうかを考慮する.文字列だけでなく,配列も集合と同様に,このようなシーンも考慮しなければならない.
シナリオ:このようなシーンが発生する可能性のあるデータに対して、データ保護を行います.