android中的自动完成功能无法使用动态数据

android中的自动完成功能无法使用动态数据,第1张

概述我在 Android中面临自动完成的问题.我试图在匹配的每个按键上动态地从其他应用程序读取数据,而不是在Activity本身中对数据进行硬编码.请在下面找到我的程序,并建议我在哪里错了. 注意:在第一次按键时,结果将被填充.之后,如果我清除输入的文本并输入不同的字符,结果将不会显示在自动完成下拉框中.我在每次按键时从其他应用程序获取,但没有填充在自动完成下拉框中. 我尝试使用textView.sh 我在 Android中面临自动完成的问题.我试图在匹配的每个按键上动态地从其他应用程序读取数据,而不是在Activity本身中对数据进行硬编码.请在下面找到我的程序,并建议我在哪里错了.

注意:在第一次按键时,结果将被填充.之后,如果我清除输入的文本并输入不同的字符,结果将不会显示在自动完成下拉框中.我在每次按键时从其他应用程序获取,但没有填充在自动完成下拉框中.

我尝试使用textVIEw.showDropDown();和adapter.setNotifyOnChange(true);选项.但没用.

package com.util;import java.io.BufferedReader;import java.io.IOException;import java.io.inputStream;import java.io.inputStreamReader;import java.util.ArrayList;import java.util.List;import org.apache.http.httpentity;import org.apache.http.httpResponse;import org.apache.http.Statusline;import org.apache.http.clIEnt.ClIEntProtocolException;import org.apache.http.clIEnt.httpClIEnt;import org.apache.http.clIEnt.methods.httpGet;import org.apache.http.impl.clIEnt.DefaulthttpClIEnt;import org.Json.JsONArray;import org.Json.JsONObject;import androID.app.Activity;import androID.os.Bundle;import androID.text.Editable;import androID.text.TextWatcher;import androID.util.Log;import androID.Widget.ArrayAdapter;import androID.Widget.autoCompleteTextVIEw;public class HelloautoCompleteActivity extends Activity {List countrIEs = new ArrayList();    String url = ""; //some application urlautoCompleteTextVIEw textVIEw;ArrayAdapter<String> adapter;@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.main);    textVIEw = (autoCompleteTextVIEw) findVIEwByID(R.ID.autocomplete_country);    textVIEw.addTextChangedListener(new CostomTextWatcher());    textVIEw.setThreshold(1);    adapter = new ArrayAdapter<String>(this,R.layout.List_item,countrIEs);    textVIEw.setAdapter(adapter);}private class CostomTextWatcher implements TextWatcher {    @OverrIDe    public voID afterTextChanged(Editable s) {    }    @OverrIDe    public voID beforeTextChanged(CharSequence s,int start,int count,int after) {    }    @OverrIDe    public voID onTextChanged(CharSequence s,int before,int count) {        if (s.length() > 0) {            countrIEs.clear();            String readTwitterFeed = readFeed(s.toString());            System.out.println(readTwitterFeed);            try {                JsONObject menuObject = new JsONObject(readTwitterFeed);                JsONArray menuitemArray = menuObject                        .getJsONArray("objectnameList");                for (int i = 0; i < menuitemArray.length(); i++) {                    System.out.println(menuitemArray.get(i));                    countrIEs.add(menuitemArray.get(i).toString());                }                // adapter.notifyDataSetChanged();                // adapter.setNotifyOnChange(true);                // textVIEw.setAdapter(adapter);                // textVIEw.setThreshold(1);                // textVIEw.setAdapter(adapter);                // textVIEw.showDropDown();                // adapter.setNotifyOnChange(true);            } catch (Exception e) {                e.printstacktrace();            }        }    }}public String readFeed(String val) {    StringBuilder builder = new StringBuilder();    httpClIEnt clIEnt = new DefaulthttpClIEnt();    httpGet httpGet = new httpGet(            url);    try {        httpResponse response = clIEnt.execute(httpGet);        Statusline statusline = response.getStatusline();        int statusCode = statusline.getStatusCode();        if (statusCode == 200) {            System.out.println("200");            httpentity entity = response.getEntity();            inputStream content = entity.getContent();            BufferedReader reader = new BufferedReader(                    new inputStreamReader(content));            String line;            while ((line = reader.readline()) != null) {                builder.append(line);            }        } else {            System.out.println("else block");            Log.e(HelloautoCompleteActivity.class.toString(),"Failed to download file");        }    } catch (ClIEntProtocolException e) {        e.printstacktrace();    } catch (IOException e) {        e.printstacktrace();    }    return builder.toString();}

}

解决方法 您也可以使用Filter接口来实现此功能.事实证明,Filter.performFiltering()仅在此类目的的情况下从UI线程调用.以下是我用来执行此 *** 作的一些代码:

Filter filter = new Filter() {    @OverrIDe    public CharSequence convertResultToString(Object resultValue) {        return resultValue.toString();    }    @OverrIDe    protected FilterResults performFiltering(CharSequence charSequence) {        if( charSequence == null ) return null;        try {            // This call hits the server with the name I'm looking for and parses the JsON returned for the first 25 results            PagedResult results = searchByname( charSequence.toString(),1,25,true);            FilterResults filterResults = new FilterResults();            filterResults.values = results.getResults();            filterResults.count = results.getResults().size();            return filterResults;        } catch (JsONException e) {            return new FilterResults();        }    }    @OverrIDe    protected voID publishResults(CharSequence charSequence,FilterResults filterResults) {        if( filterResults != null ) {            adapter.clear();            adapter.addAll( (List<MyObject>)filterResults.values );        }    }};

然后使用Filter:

private autoCompleteTextVIEw beveragename;    ...    beveragename = findVIEwByID( R.ID.beveragename );    listadapter adapter = ...    adapter.setFilter(filter);    beveragename.setAdapter(adapter);

或者你也可以使用这个链接

http://www.grobmeIEr.de/androID-autocomplete-with-Json-data-served-by-struts-2-05122011.HTML
总结

以上是内存溢出为你收集整理的android中的自动完成功能无法使用动态数据全部内容,希望文章能够帮你解决android中的自动完成功能无法使用动态数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1121907.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存