gpt4 book ai didi

带有 SQLite LIKE 的 Android 自动完成部分工作

转载 作者:IT王子 更新时间:2023-10-29 06:24:16 26 4
gpt4 key购买 nike

我有一个 Restaurants我的 SQLite 数据库中的表具有以下记录

| Name   | Latin_Name |
+--------+------------+
| Манаки | Manaki |
+--------+------------+
| Енрико | Enriko |
+---------------------+

现在我正在做这样的搜索:

来 self 的 fragment :

String selection = DBHelper.COL_NAME + " LIKE ? OR " +
DBHelper.COL_LATIN_NAME + " LIKE ?";

String[] selectionArgs = {"%"+term+"%", "%"+term+"%"};

CursorLoader loader = new CursorLoader(getActivity(),
DatabaseContentProvider.REST_CONTENT_URI,
columns, selection, selectionArgs, null);

内容提供者query方法:

 public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {

db = dbHelper.getReadableDatabase();
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
switch(URI_MATCHER.match(uri)){
case REST_LIST:
builder.setTables(DBHelper.REST_TABLE);
break;
case REST_ID:
builder.appendWhere(DBHelper.COL_ID + " = "
+ uri.getLastPathSegment());
break;
default:
throw new IllegalArgumentException("Unsupported URI: " + uri);
}
Cursor cursor = builder.query(db, projection, selection, selectionArgs,
null, null, sortOrder);


cursor.setNotificationUri(getContext().getContentResolver(), uri);

return cursor;
}

很基础吧?现在问题来了:

如果term进来的是 en 我可以看到 Enriko 餐厅等。

如果我通过 enri 结果,我再也看不到 Enriko 了。

Manaki 餐厅也是如此 我可以看到它直到 mana 之后(对于 manak 术语)我在结果列表中看不到它。

我在调试我的 ContentProvider 时发现光标是空的,所以我猜问题一定出在数据库级别。

请帮忙。

更新:

考虑到@laalto 的评论,我决定对数据库进行一些测试。在onCreate()我的方法SQLiteOpenHelper我只在表中手动插入了这两条记录,它起作用了。

现在的问题是我必须插入 1300 条记录 onCreate()来自json文件在 assets 中运送文件夹。现在我正在解析 json文件创建一个 ArrayList<Restaurant>然后遍历它并为所有 1300 个项目的每个对象插入一条记录。

这种插​​入不适用于 SQLite LIKE方法。

这种填充数据库有什么陷阱吗?

也许我需要更改文件编码(现在是 UTF-8)或者数据库的排序规则,或者可能是 getString()来自 JSONObject可以针对数据库进行调整吗?

最佳答案

如果情况紧急,这里有一个快速而肮脏的解决方案。

2.600 个字符串(1.300 西里尔文 + 1.300 拉丁文)在内存中处理的值很少:您可以简单地从 SQLite 加载所有值

select name, latin_name from restaurants

然后您可以在 Java 中循环结果集,同时使用 String.contains 方法搜索匹配的字符串。请记住 contains 方法区分大小写,因此您应该使用如下内容:

string1.toLowerCase().contains(string2.toLowerCase())

关于带有 SQLite LIKE 的 Android 自动完成部分工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20653370/

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