android lint中的probable bugs
什麼是 Lint
Lint 是Android Studio 提供的 代碼掃描分析工具,它可以幫助我們發現代碼結構/質量問題,同時提供一些解決方案,而且這個過程不需要我們手寫測試用例。
Android Studio 中內置了 Lint,Lint 的使用路徑:
工具欄 -> Analyze -> Inspect Code
檢測工具介紹
1、
Parameter annotated @NonNull must not override @Nullable parameter
註解@NonNull的參數不能重寫@Nullable參數
Not annotated method overrides method annotated with @NonNull
未注釋的方法重寫用@NonNull注釋的方法
@NotEmpty、@NotBlank、@NotNull的區別
@NotEmpty 用在集合類上面
@NotBlank 用在String上面
@NotNull 用在基本類型上
NotEmpty
其String類、Collection、Map、數組,是不能為null或者長度為0的(String、Collection、Map的isEmpty()方法)。
NotBlank
和{@code NotEmpty}不同的是,尾部空格被忽略,純空格的String也是異常。@NotBlank用於String。
NotNull
是不能為null
@NotNull的問題是不能檢查".空字元串長度為0,還是用@NotEmpty
這些註解是用來標註方法是否能傳入null值,如果可以傳入NUll值,則標記為nullbale,如果不可以則標註為Nonnull. 在我們做了一些不安全嚴謹的編碼操作的時候,這些注釋會給我們一些警告。比如說
方法是要傳入String的類型,調用中傳入了null,系統卻沒有任何提示,造成潛在錯誤。
添加註釋NonNull後,調用方法傳入null後系統便會彈出警告
怎麼生成@Nullable和NotNull?
Android studio中的Infer Nullity變可以生成相應的注釋。
例如:
public void startAnim(@NonNull final View view, @Nullable PointF startP, @NonNull PointF stopP, @Nullable Bundle savedInstanceState){
}
public class NoFragment extends Fragment{ @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_nochat,null,false); return view; }}
Result of File.mkdir() is ignored
File.mkdir()的結果被忽略
File.mkdir()方法有個返回值,編輯器編譯的時候發現沒有對這個返回值進行檢查
Stack Overflow解決如下:
boolean wasSuccessful = myDir.mkdirs();
if (!wasSuccessful) {
System.out.println("was not successful."); }或者添加註釋,忽略這個警告
@SuppressWarnings("all")
在方法的前面添加所有警告忽略
關於注釋的拓展
其實這兩個注釋都是從Android支持註解庫中獲取到的,在這個庫中還有其他一些更好的注釋:
@CheckResult
該注釋是來告訴我們該方法的返回值類型是我們預計要使用的,而不是錯誤效果的方法:
可以看到,添加了這個注釋後,系統會提示你所傳入的參數格式是錯誤的(普通的提示只會分辨出是否傳入的是String)
@StringRes 與 @DrawableRes 等等
你是不是在TextView上調用setText方法,經常會出現莫名其妙的異常java android.content.res.Resources$NotFoundException: String resource ID #0x3039? 如果設置了一個整型數給setText,TextView會假定這個整型數是一個字元串的資源id,為了設置string文本將會查詢這個整數。對於整型數是無效的資源id的問題,可以通過@StringRes 註解來補救。推薦閱讀:
TAG:Bug | AndroidStudio | 異常檢測 |