android autocomplete不';我第一次不工作

android autocomplete不';我第一次不工作,android,autocomplete,Android,Autocomplete,我试图从远程地址获取数据,将它们放入一个列表,然后进行自动完成,但我遇到了一个有线问题,当我第一次在editText中键入字符时,我监控列表中是否有正确的数据,但自动完成不起作用,如果我删除此项并再次键入相同的字符,它将正常工作,这是我的密码 private OnKeyListener mKeyListener = new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) {

我试图从远程地址获取数据,将它们放入一个列表,然后进行自动完成,但我遇到了一个有线问题,当我第一次在editText中键入字符时,我监控列表中是否有正确的数据,但自动完成不起作用,如果我删除此项并再次键入相同的字符,它将正常工作,这是我的密码

private OnKeyListener mKeyListener = new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
      // do something when the button is clicked
        if (event.getAction() == KeyEvent.ACTION_UP) {
            //do something here

            companyList.clear();
            EditText getInput = (EditText) findViewById(R.id.editText1);

            char pressedKey = (char) event.getUnicodeChar();
            String inputStr = Character.toString(pressedKey);
            inputStr = getInput.getText().toString();
            Logger.getLogger("test1").info(inputStr);

            if(keyCode == 67){
                return false;
            }
            String urlStr = "http://autoc.finance.yahoo.com/autoc?query=" + inputStr +
                    "&callback=YAHOO.Finance.SymbolSuggest.ssCallback";

            Logger.getLogger("url success").info(urlStr);

            AsyncHttpClient client = new AsyncHttpClient();
            Logger.getLogger("client success").info(urlStr);
            client.get(urlStr, new AsyncHttpResponseHandler() {
                public void onSuccess(String response) {
                    Logger.getLogger("testsuccess").info(response);
                    String jString = (String) response.subSequence(39, response.length()-1);
                    try {
                        JSONObject jsonObj = new JSONObject(jString);
                        JSONArray jsonArr = jsonObj.getJSONObject("ResultSet").getJSONArray("Result");
                        int i=0;
                        for(i = 0; i < jsonArr.length(); i++){
                            JSONObject tmpObj = jsonArr.getJSONObject(i);
                            String line = tmpObj.getString("symbol") + ", " + tmpObj.getString("name") + " (" + tmpObj.getString("exch") + ")";
                            companyList.add(line);
                        }
                        JSONObject firstObj = jsonArr.getJSONObject(0);
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    for(String word : companyList){
                        Logger.getLogger("companyList").info(word);
                    }

                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
                            android.R.layout.simple_list_item_1, companyList);
                    AutoCompleteTextView textView = (AutoCompleteTextView)
                            findViewById(R.id.editText1);
                    Logger.getLogger("text2").info(textView.getText().toString());
                    textView.setAdapter(adapter);
                    Logger.getLogger("text3").info(textView.getText().toString());
                    textView.setThreshold(1);
                    Logger.getLogger("text4").info(textView.getText().toString());
}); 
                }
            });

            return false;
        }
        return false;
    }
};
私有OnKeyListener mKeyListener=new OnKeyListener(){ 公共布尔onKey(视图v、int keyCode、KeyEvent事件){ //单击按钮时执行某些操作 if(event.getAction()==KeyEvent.ACTION\u UP){ //在这里做点什么 companyList.clear(); EditText getInput=(EditText)findViewById(R.id.editText1); char pressedKey=(char)event.getUnicodeChar(); 字符串inputStr=Character.toString(按键); inputStr=getInput.getText().toString(); Logger.getLogger(“test1”).info(inputStr); 如果(键代码==67){ 返回false; } 字符串urlStr=”http://autoc.finance.yahoo.com/autoc?query=“+inputStr+ “&callback=YAHOO.Finance.SymbolSuggest.ssCallback”; Logger.getLogger(“url成功”).info(urlStr); AsyncHttpClient=新的AsyncHttpClient(); Logger.getLogger(“客户成功”).info(urlStr); get(urlStr,新的AsyncHttpResponseHandler(){ 成功时公共无效(字符串响应){ Logger.getLogger(“testsuccess”).info(响应); String jString=(String)response.subSequence(39,response.length()-1); 试一试{ JSONObject jsonObj=新的JSONObject(jString); JSONArray jsonArr=jsonObj.getJSONObject(“结果集”).getJSONArray(“结果”); int i=0; 对于(i=0;i
第一次键入字符时,logger
text2
text3
text4
都出现在logcat中,但自动完成不起作用,有人知道为什么吗?谢谢

可能需要使用相同的适配器和调用

notifyDataSetChanged

如果您没有找到答案,我建议您切换到描述的实现

什么是styleFetcher?我试过了,但不了解styleFetcher,我需要下载一些jar文件吗?在这个例子中,styleFetcher是对web的同步调用。您可以调用它,因为performFiltering方法是从适配器线程(而不是UI)调用的,但是如果我需要从主线程获取一个参数并将其传递给StyleFetcher函数,例如url,如何实现?您可以*在ctor中传递它*将其声明为“final”在包含调用web*的函数的重写实现的作用域中,在包含调用webcall setAdapter的函数的重写实现的作用域中声明它为类成员,而不是每次键入某个内容时,在这里看到我的答案如何做到这一点注意,在后台调用runQuery时,不需要调用任何异步请求thread@pskink这很有效,谢谢,但是在这种情况下,我如何获得所选的字符串?我使用了getItemAtPosition,但它只提供了android.database。MatrixCursor@b2e12f88its游标,所以使用getString、getInteger、getFloat等。。。您可以使用DatabaseUtils.dumpCurrentRow查看行数据