From b956dee8ab3bf018651ff76e5ee6e3f21696f322 Mon Sep 17 00:00:00 2001 From: tb202302116011 <1271741232@qq.com> Date: Tue, 27 Jan 2026 00:11:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9search=E6=97=B6=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=AD=A3=E7=A1=AE=E6=98=BE=E7=A4=BA=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/micode/notes/data/NotesProvider.java | 57 +++++++++++++++---- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/micode/notes/data/NotesProvider.java b/src/main/java/net/micode/notes/data/NotesProvider.java index ceb1020..2028250 100644 --- a/src/main/java/net/micode/notes/data/NotesProvider.java +++ b/src/main/java/net/micode/notes/data/NotesProvider.java @@ -23,8 +23,10 @@ import android.content.ContentValues; import android.content.Intent; import android.content.UriMatcher; import android.database.Cursor; +import android.database.CursorWrapper; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; +import android.text.Html; import android.text.TextUtils; import android.util.Log; @@ -84,15 +86,15 @@ public class NotesProvider extends ContentProvider { /** * 搜索查询的投影(列)定义 * x'0A' 在SQLite中代表 '\n' 字符 - * 对于搜索结果中的标题和内容,我们将修剪 '\n' 和空白字符以显示更多信息 + * 对于搜索结果中的标题和内容,我们将修剪 '\n' 和空白字符,并移除HTML标签以显示纯文本 */ - private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + "," - + NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + "," - + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + "," - + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," - + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," - + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," - + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA; + private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + "," + + NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + "," + + NoteColumns.SNIPPET + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + "," + + NoteColumns.SNIPPET + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," + + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," + + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," + + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA; /** * 便签片段搜索查询的SQL语句 @@ -100,10 +102,9 @@ public class NotesProvider extends ContentProvider { */ private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION + " FROM " + TABLE.NOTE - + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" + + " WHERE REPLACE(REPLACE(" + NoteColumns.SNIPPET + ", '<', ''), '>', '') LIKE ?" + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; - /** * 初始化内容提供者 * @return 如果初始化成功返回true,否则返回false @@ -186,6 +187,10 @@ public class NotesProvider extends ContentProvider { searchString = String.format("%%%s%%", searchString); c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY, new String[] { searchString }); + // 创建一个自定义的Cursor包装器,用于处理HTML标签 + if (c != null && c.moveToFirst()) { + c = new HtmlCleaningCursorWrapper(c); + } } catch (IllegalStateException ex) { Log.e(TAG, "got exception: " + ex.toString()); } @@ -421,4 +426,36 @@ public class NotesProvider extends ContentProvider { // TODO: 实现此方法,返回合适的MIME类型 return null; } + + /** + * HTML标签清理Cursor包装器 + *
+ * 这个类用于包装原始Cursor,并在getString()方法中清理HTML标签, + * 确保返回纯文本内容 + *
+ */ + private class HtmlCleaningCursorWrapper extends CursorWrapper { + private int mText1ColumnIndex; + private int mText2ColumnIndex; + + /** + * 构造函数 + * @param cursor 原始Cursor + */ + public HtmlCleaningCursorWrapper(Cursor cursor) { + super(cursor); + mText1ColumnIndex = cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1); + mText2ColumnIndex = cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_2); + } + + @Override + public String getString(int column) { + String value = super.getString(column); + if ((column == mText1ColumnIndex || column == mText2ColumnIndex) && value != null) { + // 清理HTML标签,返回纯文本 + return Html.fromHtml(value).toString(); + } + return value; + } + } } \ No newline at end of file -- 2.34.1