gpt4 book ai didi

java - Android:SQLite 部分或完整单词搜索无法使用 SELECT 查询进行

转载 作者:行者123 更新时间:2023-12-01 07:47:47 25 4
gpt4 key购买 nike

我在 SQLite 数据库中有 10 个电影名称。我正在使用 SearchView 在数据库中搜索并将结果数据存储到 ArrayList 中,然后在自定义 ListView 中显示。问题是,它仅有时有效。例如,当我搜索“the god”或“god”时,它会返回“The Godfather”,但当我搜索“the shaw”或“shaw”时,它不会返回“The Shawshank Redemption”。另外,当搜索“the”时,它会返回所有以“the”开头的电影名称,例如《教父》、《好人坏人丑》、《肖申克的救赎》等。我有以下代码。此外,“未找到” toast 永远不会被触发。

SearchActivity.java

            searchView = findViewById(R.id.searchBar);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {

myDB = new DatabaseHelper(SearchActivity.this);

data = myDB.searchRecord(query);//Sends search term to database helper which returns all data found according to the search term


if (data==null){
Toasty.error(SearchActivity.this, "Not found", Toast.LENGTH_SHORT, true);
}else {
searchResultMethod();//Calling method which stores curser data in arraylist
}
return false;
}

private void searchResultMethod() {
if(data == null)
{
Toast toastem = Toasty.warning(SearchActivity.this, "Database is empty", Toast.LENGTH_SHORT, true);
toastem.show();
}else{
while(data.moveToNext())
{
arrayListTitle.add(data.getString(1));
arrayListYear.add(data.getString(2));
arrayListRating.add(data.getString(3));
arrayListThumb.add(data.getString(4));
arrayListUrl.add(data.getString(5));
}
}
CustomSearchListAdapter customSearchListAdapter = new CustomSearchListAdapter(SearchActivity.this,arrayListTitle, arrayListYear, arrayListRating, arrayListThumb, arrayListUrl);

searchListView.setAdapter(customSearchListAdapter);
searchListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent webActivityIntent = new Intent(SearchActivity.this, WebViewActivity.class);
webActivityIntent.putExtra("url_list",arrayListUrl);//Sending imdb url to web view activity
webActivityIntent.putExtra("position",i);
startActivity(webActivityIntent);

}
});

}

DatabaseHelper.java 中的 searchRecord() 方法

public Cursor searchRecord(String searchTerm)
{
db = this.getReadableDatabase();
String query ="SELECT * FROM " + TABLE_NAME + " WHERE title LIKE '%" + searchTerm + "%' OR '" + searchTerm + "%' OR '%" + searchTerm + "'";


Cursor c = db.rawQuery(query, null);


if (c == null) {
return null;
} else if (!c.moveToFirst()) {
c.close();
return null;
}

return c;
}

我不知道我做错了什么。如有任何帮助,我们将不胜感激。

最佳答案

看起来你首先执行c.moveToFirst(),然后执行data.moveToNext(),然后处理数据。你错过了第一排。改变

            while(data.moveToNext())
{
arrayListTitle.add(data.getString(1));
arrayListYear.add(data.getString(2));
arrayListRating.add(data.getString(3));
arrayListThumb.add(data.getString(4));
arrayListUrl.add(data.getString(5));
}

            do 
{
arrayListTitle.add(data.getString(1));
arrayListYear.add(data.getString(2));
arrayListRating.add(data.getString(3));
arrayListThumb.add(data.getString(4));
arrayListUrl.add(data.getString(5));
}
while(data.moveToNext())

关于java - Android:SQLite 部分或完整单词搜索无法使用 SELECT 查询进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com