diff --git a/src/net/micode/notes/model/Note.java b/src/net/micode/notes/model/Note.java index 2923a25..26caf20 100644 --- a/src/net/micode/notes/model/Note.java +++ b/src/net/micode/notes/model/Note.java @@ -1,4 +1,4 @@ -/*su +/* * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -42,11 +42,11 @@ public class Note { * Create a new note id for adding a new note to databases */ public static synchronized long getNewNoteId(Context context, long folderId) { - // Create a new note in the database + //为给定文件夹生成新的笔记ID ContentValues values = new ContentValues(); long createdTime = System.currentTimeMillis(); - values.put(NoteColumns.CREATED_DATE, createdTime); - values.put(NoteColumns.MODIFIED_DATE, createdTime); + values.put(NoteColumns.CREATED_DATE, createdTime);//创建日期 + values.put(NoteColumns.MODIFIED_DATE, createdTime);//修改日期 values.put(NoteColumns.TYPE, Notes.TYPE_NOTE); values.put(NoteColumns.LOCAL_MODIFIED, 1); values.put(NoteColumns.PARENT_ID, folderId); @@ -71,6 +71,7 @@ public class Note { } public void setNoteValue(String key, String value) { + //此方法设置笔记的值,标记为本地修改 mNoteDiffValues.put(key, value); mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); @@ -79,11 +80,12 @@ public class Note { public void setTextData(String key, String value) { mNoteData.setTextData(key, value); } + //为笔记设置文本数据。 public void setTextDataId(long id) { mNoteData.setTextDataId(id); } - + //setTextDataId、getTextDataId、setCallDataId、setCallData ,这些方法处理与笔记相关的文本和通话信息的ID和数据的设置和获取。 public long getTextDataId() { return mNoteData.mTextDataId; } @@ -99,7 +101,7 @@ public class Note { public boolean isLocalModified() { return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); } - + //根据值和数据的差异检查笔记是否具有本地修改。 public boolean syncNote(Context context, long noteId) { if (noteId <= 0) { throw new IllegalArgumentException("Wrong note id:" + noteId); @@ -108,6 +110,8 @@ public class Note { if (!isLocalModified()) { return true; } + //尝试将笔记与提供的上下文和笔记ID同步。 + //如果笔记ID小于或等于0,或者没有本地修改,则返回true。 /** * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and @@ -147,17 +151,19 @@ public class Note { mTextDataId = 0; mCallDataId = 0; } - + //初始化 mTextDataValues 和 mCallDataValues 为 ContentValues 对象,用于存储文本数据和通话数据。 + //初始化 mTextDataId 和 mCallDataId 为 0。 boolean isLocalModified() { return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; } - + //检查文本或通话数据是否有本地修改 void setTextDataId(long id) { if(id <= 0) { throw new IllegalArgumentException("Text data id should larger than 0"); } mTextDataId = id; } + //设置文本数据的ID,如果提供的ID小于等于0,报告异常 void setCallDataId(long id) { if (id <= 0) { @@ -165,52 +171,57 @@ public class Note { } mCallDataId = id; } - + //设置通话数据的键值对,并标记笔记为本地修改,更新修改日期 void setCallData(String key, String value) { mCallDataValues.put(key, value); mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); } - + //设置文本数据的键值对,并标记笔记为本地修改,更新修改日期 void setTextData(String key, String value) { mTextDataValues.put(key, value); mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); } - + //将数据推送到ContentResolver的方法 Uri pushIntoContentResolver(Context context, long noteId) { - /** - * Check for safety - */ + //检查noteID的有效性,如果小于等于0,抛出IllegalArgumentException if (noteId <= 0) { throw new IllegalArgumentException("Wrong note id:" + noteId); } - + //用于保存ContentProvider操作列表 ArrayList operationList = new ArrayList(); ContentProviderOperation.Builder builder = null; - + //处理文本数据的操作 if(mTextDataValues.size() > 0) { + //设置文本数据的关联noteID mTextDataValues.put(DataColumns.NOTE_ID, noteId); + // 如果mTextDataId为0,表示需要插入新的文本数据 if (mTextDataId == 0) { mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); + //插入数据并获取新的Uri Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, mTextDataValues); try { + // 解析Uri中的数据,获取新插入数据的id,并设置给mTextDataId setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); } catch (NumberFormatException e) { + // 插入数据失败,记录错误日志并清空数据 Log.e(TAG, "Insert new text data fail with noteId" + noteId); mTextDataValues.clear(); return null; } } else { + // mTextDataId不为0,表示需要更新已存在的文本数据 builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( Notes.CONTENT_DATA_URI, mTextDataId)); builder.withValues(mTextDataValues); operationList.add(builder.build()); } + // 清空文本数据,以便下一次使用 mTextDataValues.clear(); } - + // 处理通话数据的操作,逻辑类似于文本数据 if(mCallDataValues.size() > 0) { mCallDataValues.put(DataColumns.NOTE_ID, noteId); if (mCallDataId == 0) { @@ -232,17 +243,20 @@ public class Note { } mCallDataValues.clear(); } - + // 如果有待执行的操作,将它们应用到ContentResolver if (operationList.size() > 0) { try { ContentProviderResult[] results = context.getContentResolver().applyBatch( Notes.AUTHORITY, operationList); + // 返回插入或更新后的笔记的Uri,如果操作失败则返回null return (results == null || results.length == 0 || results[0] == null) ? null : ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId); } catch (RemoteException e) { + // 捕获远程异常并记录错误日志 Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); return null; } catch (OperationApplicationException e) { + // 捕获操作应用异常并记录错误日志 Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); return null; } @@ -251,3 +265,5 @@ public class Note { } } } + +