Androidのいくつかのよくある異常で無視されやすい場所
一、空ポインタ異常
空ポインタ異常は「.」に違いない.前の変数は空です.これは比較的調べやすい.
空のポインタはCrashで最もよく見られるもので、最も無視されやすいもので、バックグラウンドがデータを空に戻すシーンは、防ぐことができません.空になる可能性があるデータであれば、使用する前に空の判定処理をして、崩壊の確率を減らすことが望ましいです.コード実行順のシーンもあり、まだ値を付けていないのに使用したり、ポインタを空にしたりするに違いありません.
方案:防護活動をしっかりと行い、論理的に整理して崩壊の発生を減らす.
二、タイプ変換異常
APIから送信されたデータのタイプ変換が必要な場合があります.APIから送信されたデータが空ではないことを保証することはできません.このようなシーンを無視すると、私たちを待っているのはCrashです.
≪スキーマ|Schema|ldap≫:タイプ変換に対してタイプ安全変換の関数を書きます.つまり、データが空の場合、デフォルト値を返します.
関数をUtilsクラスに配置して多重化します.同様に、long、double、Stringなどのタイプの転化は、このように防護し、崩壊を減らすことができます.
三、下付き境界を越える
値が自分の長さを超えると、境界異常を報告します.APIがデータを転送する場合,文字列を二次処理する場合,文字列の値が境界を越えるシーンがあるかどうかを考慮する.文字列だけでなく,配列も集合と同様に,このようなシーンも考慮しなければならない.
シナリオ:このようなシーンが発生する可能性のあるデータに対して、データ保護を行います.
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がデータを転送する場合,文字列を二次処理する場合,文字列の値が境界を越えるシーンがあるかどうかを考慮する.文字列だけでなく,配列も集合と同様に,このようなシーンも考慮しなければならない.
シナリオ:このようなシーンが発生する可能性のあるデータに対して、データ保護を行います.