項目實現搜索功能時,使用Charles抓包查看網絡請求,發(fā)現使用軟鍵盤觸發(fā)一次搜索會執(zhí)行2次Api請求。通過調試發(fā)現原因是Android的EditText通過setOnEditorActionListener給文本編輯框設置監(jiān)聽事件,但是在其處理方法onEditorAction中的邏輯在每次回車后都觸發(fā)了兩次,原來是在鍵盤回車的ACTION_UP和ACTION_DOWN時都會觸發(fā)這個方法。因此需要對代碼做下調整,防止執(zhí)行2次網絡請求耗費流量和性能。
etSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
doSearch();
return true;
}
return true;
}
});