我得为我的申请设置一个自动完成程序。
我已经理解了autocompletetextview操作,但是我想动态修改android autocompletion使用的String[]
我想做的是:调用一个php页面,它会给我一个String[]我将在autocompletetextview中使用,但我只想在最后一个页面之后至少500毫秒按下一个键的情况下这样做。
编辑:
好吧,我错了。如果在最后一次按下之后500毫秒内没有按键,我想让asynctask运行(你知道,通过对输入的每个字符调用一个请求来避免服务器过度收费)。
我想我应该这样做:

zipBox.setAdapter(myAdapter); //zipBox is an AutoCompleteTextView
zipBox.addTextChangedListener(new TextWatcher(){

    @Override
    public void onTextChanged(CharSequence s,
             int start, int before, int count){

        d = new Date();
        GetAutocompletion ac = new GetAutocompletion();
        ac.execute(zipBox.getText().toString());
    }
    // Other methods to implement
});


private class GetAutocompletion extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... params){

        //adapter.notifyDataSetChanged();

        try{
             wait(500);
        } catch(InterruptedException e){}

        Date d1 = new Date();

        if(d1.getTime() - d.getTime() > 500){
            String res = "";

            try{

                URLConnection conn = new URL("myUrl.php?term=" + params[0]).openConnection();
                InputStream in = conn.getInputStream();
                Scanner s = new Scanner(in).useDelimiter("\\A");

                while (s.hasNext())
                    res += s.next();

                s.close();
                in.close();

            } catch(Exception e){ Log.d("eduine", "error during autocompletion receive"); }

            return json;
        } else return null;
    }

    @Override
    protected void onPostExecute(String result){

        super.onPostExecute(result);

        Log.d("eduine", "json result : " + result);
    }

}

你怎么认为?有什么我可以用的计时器类吗?

最佳答案

我会在我的文本观察程序中保留一个名为lastpress的长字段。按键时,设置lastPress = System.currentTimeMillis()。然后,将您的整个ontextchanged包装在一个if中,条件是if(System.currentTimeMillis() - lastPress>500),并在该if中再次设置lastpress。

new TextWatcher(){
    long lastPress = 0l;
    @Override
    public void onTextChanged(CharSequence s,
             int start, int before, int count){
        if(System.currentTimeMillis() - lastpress > 500){
            lastPress= System.currentTimeMillis();
            GetAutocompletion ac = new GetAutocompletion();
            ac.execute(zipBox.getText().toString());
        }
    }
    // Other methods to implement
}

10-08 20:27