0

連絡先を取得した後に検索操作を実行しているときに、検索バーに非常に速く文字を入力すると、この例外が表示され、アプリケーションがクラッシュします。この問題を解決するために私を助けてください。コードも一緒に

@Override
public boolean onQueryTextChange(String newtext) {


    String searchString = newtext;
    int textLength = searchString.length();

    ArrayList<Masterlistmodel> type_name_filter = new ArrayList<Masterlistmodel>();

    /* String text = edtField.getText().toString(); */

    for (int i = 0; i <masterarr.size(); i++) {

        String Name = masterarr.get(i).getName();
        if (searchString.equalsIgnoreCase(Name.substring(0,
                textLength))) {
            type_name_filter.add(masterarr.get(i));

        }
    }

    type_name_copy = type_name_filter;

    listUpdate(type_name_copy);



    return true;
}
@Override
public boolean onQueryTextSubmit(String arg0) {
    // TODO Auto-generated method stub
    return false;
}
4

4 に答える 4

0

範囲外の配列インデックスにアクセスしようとすると、IndexOutOfBoundsException が発生します。例えば:

String[] myArray = new String[10];
myArray[10] = "test"; // 10 is out of limits(0-9)

そのような例外を生成します。

これとともに:

ArrayList<String> result= new ArrayList<String>(); 
Then you can add elements to this list with the following:

// result[i] = trax.substring(s1+4,s2);
result.add(trax.substring(s1+4,s2));

それはあなたのために働き、この例外を取り除きます。

于 2013-09-13T04:38:02.457 に答える
0


メソッド「 onQueryTextChange」に最初のステートメントを追加します

if(newtext==null) return true;


それから試してください

于 2013-09-13T05:18:47.000 に答える
0

最初に指摘しておきたいのは、オブジェクトの種類がわからないということmasterarrです。

サイズは容量に関連し、長さは配列内の実際のアイテムの量に関連してい.size()ます。.length()

equalsIgnoreCaseまた、@rsinhaが言ったように、メソッドを実行しようとしてName、その反復の変数の長さがユーザーが入力した文字列の長さよりも短い場合に、間違いが発生する可能性があると思います。

for (int i = 0; i <masterarr.size(); i++) {

    String Name = masterarr.get(i).getName();
    if (searchString.equalsIgnoreCase(Name.substring(0,
            Math.min(textLength,Name.length())))) {
        type_name_filter.add(masterarr.get(i));

    }
}

最初に使用してみて.length()、うまくいかない場合は、forループで変更を試してください。あなたのコードには、私が助けることができるものはもうありません。

于 2013-09-13T05:05:28.267 に答える
0

「textLength」は、ユーザーが入力した検索文字列の長さです。この長さのエントリは、マスター リスト 'masterarr' にない可能性があります。あなたは試すことができます:

String Name = masterarr.get(i).getName();
if (Name.startsWith(searchString)) {
   type_name_filter.add(masterarr.get(i));
}
于 2013-09-13T04:52:31.207 に答える