図書館のウェブサイトにアクセスするための検索機能を作成しています。クエリ文字列が送信されると、プログラムは新しいスレッドを起動してウェブ上の情報を解析します。AVD では正常に動作しますが、私の HTC DesireHD は検索結果を繰り返し表示しました (実際の結果が 1. 2. 3. の場合、1. 2. 3. 1. 2. 3. のように見えます)。onQueryTextSubmit メソッドにブレークポイントを設定したところ、メソッド onQueryTextSubmit() のコードが 2 回実行されていることがわかりました。ここに私のコードがあります:
sv.setOnQueryTextListener(new OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
list.clear();
String str = null;
try {//encoding Chinese character
str = new String(query
.trim().getBytes(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
SearchPost sp = new SearchPost(SEARCH_URL + str);
new Thread(sp).start();
return false;
}
});
protected class SearchPost implements Runnable{
public String url = "";
SearchPost(String urls){
url = urls;
}
public SearchPost() {
}
@Override
public void run() {
Message message = handler.obtainMessage();
message.what = DOWNLOAD_COMPLETE;
try{
doc = Jsoup.connect(url).get();
handler.sendMessage(message);
}catch(IOException e){
e.printStackTrace();
message.what = DOWNLOAD_FAIL;
handler.sendMessage(message);
}
}
}