Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在我的android应用程序中创建一个实时查询字段来查询我的MYSQL数据库,而无需按search_Android_Mysql_Search - Fatal编程技术网

如何在我的android应用程序中创建一个实时查询字段来查询我的MYSQL数据库,而无需按search

如何在我的android应用程序中创建一个实时查询字段来查询我的MYSQL数据库,而无需按search,android,mysql,search,Android,Mysql,Search,我有一个可以工作的搜索功能,可以将搜索结果插入微调器,但我希望它能够像谷歌一样,不需要按下搜索按钮就可以运行。 类似这样的内容:我觉得你需要的是一个改变了上下文的侦听器看看这里首先,你需要使用一个AutoCompleteTextView,它在每次文本改变时触发一个过滤器,并将建议完全显示为你附加的图像 然后,您必须是自定义适配器,并将其添加到活动的onCreate函数中的视图中: protected void onCreate(Bundle savedInstanceState) { .

我有一个可以工作的搜索功能,可以将搜索结果插入微调器,但我希望它能够像谷歌一样,不需要按下搜索按钮就可以运行。
类似这样的内容:

我觉得你需要的是一个改变了上下文的侦听器看看这里

首先,你需要使用一个AutoCompleteTextView,它在每次文本改变时触发一个过滤器,并将建议完全显示为你附加的图像

然后,您必须是自定义适配器,并将其添加到活动的onCreate函数中的视图中:

protected void onCreate(Bundle savedInstanceState) {
    ...

    AutomaticSearchAdapter adapter = new AutomaticSearchAdapter(this, new ArrayList<CustomObject>(), "");
    listView = (AutoCompleteTextView) findViewById(R.id.search_complete);
    listView.setThreshold(1);
    listView.setAdapter(adapter);

    ...
}
创建时受保护的void(Bundle savedInstanceState){
...
AutomaticSearchAdapter=新的AutomaticSearchAdapter(这是新的ArrayList(),“”);
listView=(AutoCompleteTextView)findViewById(R.id.search\u complete);
设置阈值(1);
setAdapter(适配器);
...
}
下面是一个模板,说明如何构建自定义适配器,该适配器从任何API加载数据,并根据自己的筛选条件进行建议

public class AutomaticSearchAdapter extends ArrayAdapter implements AsyncResponse, Filterable {
    private ArrayList<ContactItem> realList; // The list that will be shown
    private ArrayList<CustomObject> results =  new ArrayList<CustomObject> (); // A list with all data from your API

    private Filter mFilter = new Filter(){
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            if(constraint != null) {
                String constraintTrim = ContactSearchAdapter.toPlain(constraint.toString()).trim().toLowerCase();


        // When te user introduces at least 3 characteres, get data from your API
                if (constraintTrim.length() == 3) {
            // Call Here to you API, and populate results
                }

        ArrayList<CustomObject> suggestions =  new ArrayList<CustomObject> ();
                for (CustomObject object : results) {
            if(/*some condition on your downloaded datum */) {
                suggestions.add(object);
            }
                }

                filterResults.values = suggestions;
                filterResults.count = suggestions.size();
            }

            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence contraint, FilterResults results) {
            if(results == null){
                return;
            }

            try {
                realList.clear();
                if (results.values != null){
                    realList.addAll((List<CustomObject>) results.values);
                }
                notifyDataSetChanged();
            }catch ( Exception e) {

            }
        }
    };


    public int getCount() {
        return realList.size();
    }

    @Override
    public Object getItem(int position) {
        try {
            if (realList.size() > 0 ) {
                return realList.get(position);
            }else {
                return null;
            }
        }catch (Exception ex) {
            return null;
        }
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    // HERE MUST BE YOUR CUSTOM getView FROM YOUR LIST
        // YOU CAN LEARN MORE ABOUT http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67

        return convertView;
    }

    @Override
    public void postStart() {
        //Nothing to do.
    }


    @Override
    public Filter getFilter() {
        return mFilter;
    }
}
公共类自动搜索适配器扩展ArrayAdapter实现异步响应,可过滤{
private ArrayList realList;//将显示的列表
private ArrayList results=new ArrayList();//包含API中所有数据的列表
专用过滤器mFilter=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
if(约束!=null){
String constraintTrim=ContactSearchAdapter.toPlain(constraint.toString()).trim().toLowerCase();
//当te用户引入至少3个字符时,从API获取数据
if(constraintTrim.length()=3){
//在这里调用API,并填充结果
}
ArrayList建议=新建ArrayList();
用于(自定义对象:结果){
如果(/*下载数据上的某些条件*/){
建议。添加(对象);
}
}
filterResults.values=建议;
filterResults.count=建议.size();
}
返回过滤器结果;
}
@凌驾
受保护的void publishResults(CharSequence Contrint、FilterResults结果){
如果(结果==null){
返回;
}
试一试{
realList.clear();
如果(results.values!=null){
addAll((List)results.values);
}
notifyDataSetChanged();
}捕获(例外e){
}
}
};
public int getCount(){
返回realList.size();
}
@凌驾
公共对象getItem(int位置){
试一试{
if(realList.size()>0){
返回realList.get(位置);
}否则{
返回null;
}
}捕获(例外情况除外){
返回null;
}
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//这里必须是您列表中的自定义getView
//你可以了解更多关于http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67
返回视图;
}
@凌驾
public void postStart(){
//无事可做。
}
@凌驾
公共过滤器getFilter(){
返回过滤器;
}
}

当然,您需要根据自己的需求重构上述代码。

是否需要类似的东西?我将创建一个函数来获取我的搜索结果并将它们放入一个隐藏的ArrayList中,然后我将使用上面的代码从已经解析的数据中进行搜索,以获得我想要的结果。但是,如果数据库的大小很大,这不是一种不好的做法吗?如果总是向API发出get请求,则必须设置一个限制,但这会干扰结果,因为查询不会位于隐藏的ArrayList上。因此,在这种情况下,最好的做法是向API发出请求,直到结果大于限制,当结果小于限制时,您可以停止执行web请求,只在隐藏的ArrayList上进行过滤