android studio中的搜索查询无法正常工作

Posted

技术标签:

【中文标题】android studio中的搜索查询无法正常工作【英文标题】:Search query in android studio not workng properly 【发布时间】:2018-09-12 12:02:34 【问题描述】:

好的,所以我制作了用于搜索药物并在列表视图中显示项目的模块,我在这里使用 JDBC。主要问题是当我在搜索视图中放置下划线_ 时,它会导致列表视图项重复自身的错误。

根据我的观察;此错误仅在同时插入下划线时发生,但如果以较慢的间隔按下,它无论如何都不会重复项目。


这是 SearchView 上没有任何内容时的样子:


这是下划线放置在较慢的间隔

即使列表视图中不存在下划线它仍然会显示它,但是当我添加更多下划线时,它们开始从底部开始一个接一个地消失。


这是主要问题;当同时放置下划线时

这是我在 AsyncTask 中搜索的代码

private class searchUnfiltered extends AsyncTask<String, String, String> 

String z = "";
String fromSearchView = sv.getQuery().toString().trim();
boolean isSuccess = false;

String about;

@Override
protected void onPreExecute() 
    myArrayList2.clear();
    myArrayList.clear();
    super.onPreExecute();


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

    try 
        Connection con = connectionClass.CONN();
        if (con == null) 
            z = "Please check your internet connection";
         else 

            String querySearch = "select name from medicines where name like '%"+ fromSearchView +"%' order by name ASC";

            Statement stmt1 = con.createStatement();

            ResultSet rs1 = stmt1.executeQuery(querySearch);
            if(rs1 != null) 
                while (rs1.next()) 

                    myArrayList2.add(rs1.getString("name"));
                
            
        
     catch (Exception ex) 
        isSuccess = false;
        z = "Exceptions" + ex;
    
    return z;


@Override
protected void onPostExecute(String s) 
    if(!isSuccess && !z.equals("")) 
        Toast.makeText(getBaseContext(), z, Toast.LENGTH_LONG).show();
    

    ListAdapter listAdapter = new ArrayAdapter<>(MedicineSearch.this, android.R.layout.simple_list_item_1, myArrayList2);
    lv.setAdapter(listAdapter);


每当搜索视图中的值发生更改时,searchUnfiltered 就会被触发,请告诉我我所做的是否有效,或者您有什么更好的建议,这将非常有帮助。

【问题讨论】:

我认为问题出在搜索查询中。试试下面的查询。 String querySearch = "select DISTINCT name from drug where name like '%"+ fromSearchView +"%' GROUP BY name ORDER BY name ASC"; 是的,但即使我的列表项中不存在单引号,它仍会返回任何内容 【参考方案1】:

这是一个竞争条件原因,您正在清除 PreExecute 上的数据,然后 doInBackground 正在工作,快速键入 5 _ 将清除 5 次,然后才能获得任何结果。

作为解决方案:

myArrayList2.clear();// if this didn't work try myArrayList2 = new ArrayList<>();

从 onPreExecute 到 doInBackground。

【讨论】:

你试过 myArrayList2.clear() 还是 myArrayList2 = new ArrayList(); 通过按下按钮 3 次,您在任务开始之前清除了 3 次数组,同时在 doInBackground 内部清除时,您将在每次执行 doInBackground 时清除,并且它们一一执行。我只是根据经验假设。 您的意思是创建arraylist 的实例?是的。那么这意味着所有操作都应该在doInBackground() 内呢? onPreExecute 可以是灰显字段或启动进度条(UI 工作),doInBackground 大多数计算或网络调用(这里没有 UI 工作),onPostExecute 是更多 UI 工作。但这可能会因所考虑的目标而异。

以上是关于android studio中的搜索查询无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

android studio aar能加密吗

Firebase 通过多个查询搜索并添加到 RecyclerView Android Studio

Android Studio 更新后 ProGuard 无法正常工作

Android Studio gradle 风味维度构建变体无法正常工作

Android Studio - DecimalFormat (java.text) - 无法正常工作

Css 媒体查询方向:android web 视图中的横向无法正常工作