From 823f735402c04e709ebf1e43503b4aa04a6af439 Mon Sep 17 00:00:00 2001 From: hejunjie Date: Thu, 7 Dec 2023 21:05:32 +0800 Subject: [PATCH] hejunjie is reading. --- src/net/micode/notes/gtask/data/SqlNote.java | 28 ++++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/net/micode/notes/gtask/data/SqlNote.java b/src/net/micode/notes/gtask/data/SqlNote.java index 79a4095..45fc1a3 100644 --- a/src/net/micode/notes/gtask/data/SqlNote.java +++ b/src/net/micode/notes/gtask/data/SqlNote.java @@ -37,12 +37,13 @@ import org.json.JSONObject; import java.util.ArrayList; - +//函数用于将得到的类的简写名称存入字符串TAG中 public class SqlNote { private static final String TAG = SqlNote.class.getSimpleName(); private static final int INVALID_ID = -99999; + //集合了interface NoteColumns中的17个SF常量 public static final String[] PROJECTION_NOTE = new String[] { NoteColumns.ID, NoteColumns.ALERTED_DATE, NoteColumns.BG_COLOR_ID, NoteColumns.CREATED_DATE, NoteColumns.HAS_ATTACHMENT, NoteColumns.MODIFIED_DATE, @@ -86,6 +87,7 @@ public class SqlNote { public static final int VERSION_COLUMN = 16; + //下面定义了17个内部变量,其中12个可以在content中获得,5个需要初始化为0或new private Context mContext; private ContentResolver mContentResolver; @@ -122,6 +124,7 @@ public class SqlNote { private ArrayList mDataList; + //构造函数,用于对所有的变量进行初始化 public SqlNote(Context context) { mContext = context; mContentResolver = context.getContentResolver(); @@ -142,11 +145,14 @@ public class SqlNote { mDiffNoteValues = new ContentValues(); mDataList = new ArrayList(); } - + + //构造函数 public SqlNote(Context context, Cursor c) { mContext = context; + //获取内容解析器对象 mContentResolver = context.getContentResolver(); mIsCreate = false; + //从传入的Cursor对象中加载便签数据 loadFromCursor(c); mDataList = new ArrayList(); if (mType == Notes.TYPE_NOTE) @@ -154,6 +160,7 @@ public class SqlNote { mDiffNoteValues = new ContentValues(); } + //构造函数,用于标示构造方式 public SqlNote(Context context, long id) { mContext = context; mContentResolver = context.getContentResolver(); @@ -163,16 +170,18 @@ public class SqlNote { if (mType == Notes.TYPE_NOTE) loadDataContent(); mDiffNoteValues = new ContentValues(); - } + //函数作用于从数据库中加载指定ID的便签数据 private void loadFromCursor(long id) { Cursor c = null; + //通过ID获得对应的ContentResolver中的cursor try { c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)", new String[] { String.valueOf(id) }, null); + //然后加载数据进行初始化 if (c != null) { c.moveToNext(); loadFromCursor(c); @@ -185,6 +194,7 @@ public class SqlNote { } } + //函数用于从传入的Cursor对象中加载便签数据 private void loadFromCursor(Cursor c) { mId = c.getLong(ID_COLUMN); mAlertDate = c.getLong(ALERTED_DATE_COLUMN); @@ -200,9 +210,12 @@ public class SqlNote { mVersion = c.getLong(VERSION_COLUMN); } + //函数用于从数据库中加载与特定便签相关的数据内容 private void loadDataContent() { Cursor c = null; + //清空mDatalist中的数据,以便重新加载新的数据 mDataList.clear(); + //使用内容解析器对象mContentResolver调用query()方法查询数据库,查询结果将赋值给Cursor对象c,再通过检查c是否为空来判断查询是否成功。如果不为空,表示查询到了结果。然后通过循环遍历c的每一行数据,创建SqlData对象并将其加入mDataList中。 try { c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA, "(note_id=?)", new String[] { @@ -226,13 +239,16 @@ public class SqlNote { } } + //函数用于设置便签的内容,接收一个JSONObject对象作为参数,并根据该对象中的数据更新便签的属性。 public boolean setContent(JSONObject js) { try { + //从JSONObject对象中获取名为note的子对象,该子对象包含了便签的各个属性。接着根据便签的类型(系统、文件夹、笔记)进行不同的处理逻辑。 JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + //如果类型是系统,则打印警告信息 if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { Log.w(TAG, "cannot set system folder"); } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { - // for folder we can only update the snnipet and type + // 如果类型是文件夹,则更新摘要和类型属性。如果是新建笔记或者摘要有变化,则将新的摘要值存入mDiffNoteValues集合,并更新mSnippet的值。同样的,如果是新建便签或者类型有变化,则将新的类型值存入mDiffNoteValues集合,并更新mType的值。 String snippet = note.has(NoteColumns.SNIPPET) ? note .getString(NoteColumns.SNIPPET) : ""; if (mIsCreate || !mSnippet.equals(snippet)) { @@ -246,7 +262,8 @@ public class SqlNote { mDiffNoteValues.put(NoteColumns.TYPE, type); } mType = type; - } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) { + } //如果类型是笔记,则根据笔记的各个属性更新相应的值 + else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) { JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID; if (mIsCreate || mId != id) { @@ -331,6 +348,7 @@ public class SqlNote { } mOriginParent = originParent; + //最后,遍历dataArray数组,该数组包含了便签的内容数据。对于每个数据对象,如果存在ID属性,就在mDataList列表中查找对应的SqlData对象,如果找到则使用该对象,否则创建一个新的SqlData对象并添加到mDataList列表中。然后调用sqlData.setContent(data),将数据对象传递给SqlData对象进行处理。 for (int i = 0; i < dataArray.length(); i++) { JSONObject data = dataArray.getJSONObject(i); SqlData sqlData = null;