Compare commits

...

8 Commits

Author SHA1 Message Date
mbhvfy6mx 49f90c91d5 Merge pull request '蔡玉祥的注释' (#12) from cyx_branch into master
2 years ago
庞浩 ce28b7edc9 Merge branch 'master' into cyx_branch
2 years ago
蔡玉祥 006919e15e Merge remote-tracking branch 'origin/cyx_branch' into cyx_branch
2 years ago
蔡玉祥 e21db9d3d8 蔡玉祥注释
2 years ago
蔡玉祥 293c984ad5 蔡玉祥注释
2 years ago
蔡玉祥 6054384cf0 蔡玉祥注释
2 years ago
mbhvfy6mx 19b28b5571 Merge pull request 'heb' (#8) from master into cyx_branch
2 years ago
mbhvfy6mx 7a2ca273ed Merge pull request 'heb' (#3) from master into cyx_branch
2 years ago

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
<bytecodeTargetLevel target="11" />
</component>
</project>

@ -7,11 +7,15 @@
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\庞浩的电脑\.android\avd\Pixel_3_API_22.avd" />
<value value="C:\Users\蔡玉祥\.android\avd\Resizable_Experimental_API_UpsideDownCake.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<<<<<<< HEAD:.idea/deploymentTargetDropDown.xml
<timeTargetWasSelectedWithDropDown value="2023-04-07T06:44:46.634860500Z" />
=======
<timeTargetWasSelectedWithDropDown value="2023-04-07T06:36:29.852905700Z" />
>>>>>>> master:src/.idea/deploymentTargetDropDown.xml
</component>
</project>

@ -7,7 +7,7 @@
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#JAVA_HOME" />
<option name="gradleJvm" value="Embedded JDK" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17_PREVIEW" project-jdk-name="temurin-17" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -2,11 +2,11 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/minote.iml" filepath="$PROJECT_DIR$/minote.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.androidTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.androidTest.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.main.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.unitTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.unitTest.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/gitProject.iml" filepath="$PROJECT_DIR$/.idea/modules/gitProject.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.androidTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.androidTest.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.main.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.unitTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.unitTest.iml" />
</modules>
</component>
</project>

@ -39,29 +39,60 @@ public class MetaData extends Task {
setNotes(metaInfo.toString());
setName(GTaskStringUtils.META_NOTE_NAME);
}
/*
MetaData Task
Meta Data mRelatedGid null
setMeta getRelatedGid
setMeta gid JSON metaInfo
metaInfo GTaskStringUtils.META_HEAD_GTASK_ID gid
使 setNotes metaInfo GTaskStringUtils.META_NOTE_NAME
getRelatedGid mRelatedGid
*/
public String getRelatedGid() {
return mRelatedGid;
}
/*getRelatedGid()
MetaData mRelatedGid gid
*/
@Override
public boolean isWorthSaving() {
return getNotes() != null;
}
/*isWorthSaving() Task
null true
false
*/
@Override
public void setContentByRemoteJSON(JSONObject js) {
super.setContentByRemoteJSON(js);
public void setContentByRemoteJSON(JSONObject js) {// 调用父类的方法来设置 JSON 内容
super.setContentByRemoteJSON(js);// 检查是否存在与对象相关联的注释notes
if (getNotes() != null) {
try {
// 将注释内容解析为 JSON 对象
JSONObject metaInfo = new JSONObject(getNotes().trim());
// 从 JSON 对象中提取 GTASK_ID 字段的值,并将其存储在 mRelatedGid 变量中
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
} catch (JSONException e) {
///如果在解析注释时出现异常,则将 mRelatedGid 变量设置为 null并记录一个警告日志
Log.w(TAG, "failed to get related gid");
mRelatedGid = null;
}
}
}
/* MetaData isWorthSaving setContentByRemoteJSON
isWorthSaving Task
null true false
setContentByRemoteJSON Task
JSONObject js Task setContentByRemoteJSON
null
null JSONObject metaInfo metaInfo GTaskStringUtils.META_HEAD_GTASK_ID
mRelatedGid metaInfo mRelatedGid null*/
@Override
public void setContentByLocalJSON(JSONObject js) {
@ -80,3 +111,12 @@ public class MetaData extends Task {
}
}
/*override Task MetaData 使
setContentByLocalJSON IllegalAccessError
getLocalJSONFromContent IllegalAccessError
getSyncAction IllegalAccessError
*/

@ -46,14 +46,50 @@ public abstract class Node {
private long mLastModified;
private boolean mDeleted;
/* Node
mGid gid gid
mName
mLastModified
mDeletedtrue false
SYNC_ACTION_*使
SYNC_ACTION_NONE
SYNC_ACTION_ADD_REMOTE
SYNC_ACTION_ADD_LOCAL
SYNC_ACTION_DEL_REMOTE
SYNC_ACTION_DEL_LOCAL
SYNC_ACTION_UPDATE_REMOTE
SYNC_ACTION_UPDATE_LOCAL
SYNC_ACTION_UPDATE_CONFLICT
SYNC_ACTION_ERROR
Node Node Node */
public Node() {
mGid = null;
mName = "";
mLastModified = 0;
mDeleted = false;
}
/* Node mGidmNamemLastModified mDeleted
mGid null
mName
mLastModified 0 0
mDeleted false
*/
public abstract JSONObject getCreateAction(int actionId);
public abstract JSONObject getUpdateAction(int actionId);
@ -65,23 +101,52 @@ public abstract class Node {
public abstract JSONObject getLocalJSONFromContent();
public abstract int getSyncAction(Cursor c);
/* Node
getCreateAction(int actionId) JSON actionId JSON
getUpdateAction(int actionId) JSON getCreateAction actionId
setContentByRemoteJSON(JSONObject js) JSON
setContentByLocalJSON(JSONObject js) JSON
getLocalJSONFromContent() JSON
getSyncAction(Cursor c)
使 Node */
public void setGid(String gid) {
this.mGid = gid;
}
/* Node setGid gid
String gid
gid mGid 便使
gid
*/
public void setName(String name) {
this.mName = name;
}
/* Node mName
name mName
this
*/
public void setLastModified(long lastModified) {
this.mLastModified = lastModified;
}
/*setLastModifiedlonglastModified
this
lastModifiedmLastModified便getter
*/
public void setDeleted(boolean deleted) {
this.mDeleted = deleted;
}
/*JavasetDeletedbooleandeleted
this
deletedmDeleted便getter
deletedtruedeletedfalse
*/
public String getGid() {
return this.mGid;
}
@ -89,13 +154,30 @@ public abstract class Node {
public String getName() {
return this.mName;
}
/*JavagetGidgetNamemGidmNameID
this
getGidID便使ID
getName
*/
public long getLastModified() {
return this.mLastModified;
}
/*JavagetLastModifiedmLastModified
this
便使
getLastModified便使
*/
public boolean getDeleted() {
return this.mDeleted;
}
/*JavagetDeletedmDeleted
this
便使
getDeletedboolean
truefalse
*/
}

@ -44,7 +44,15 @@ public class SqlData {
DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1,
DataColumns.DATA3
};
/*JavaSqlData
TAGSqlData
INVALID_IDID-99999
PROJECTION_DATADataColumnsIDMIME_TYPECONTENTDATA1DATA3
访使*/
public static final int DATA_ID_COLUMN = 0;
public static final int DATA_MIME_TYPE_COLUMN = 1;
@ -70,66 +78,96 @@ public class SqlData {
private String mDataContentData3;
private ContentValues mDiffDataValues;
/*JavaSqlData
DATA_ID_COLUMNID
DATA_MIME_TYPE_COLUMNMIME
DATA_CONTENT_COLUMN
DATA_CONTENT_DATA_1_COLUMNDATA1
DATA_CONTENT_DATA_3_COLUMNDATA3
ContentResolvermContentResolverbooleanmIsCreatelongmDataIdStringmDataMimeTypeStringmDataContentlongmDataContentData1StringmDataContentData3ContentValuesmDiffDataValues
ContentValuesAndroidmDiffDataValues*/
// 构造函数用于初始化一个SqlData对象的实例
public SqlData(Context context) {
mContentResolver = context.getContentResolver();
mIsCreate = true;
mDataId = INVALID_ID;
mDataMimeType = DataConstants.NOTE;
mDataContent = "";
mDataContentData1 = 0;
mDataContentData3 = "";
mDiffDataValues = new ContentValues();
mContentResolver = context.getContentResolver();// 获取ContentResolver对象用于访问ContentProvider中的数据
mIsCreate = true;// 初始化数据的创建状态
mDataId = INVALID_ID; // 初始化数据的ID值
mDataMimeType = DataConstants.NOTE;// 初始化数据的MIME类型为NOTE
mDataContent = ""; // 初始化数据的内容为空字符串
mDataContentData1 = 0; // 初始化数据的数据内容Data1为0
mDataContentData3 = "";// 初始化数据的数据内容Data3为空字符串
mDiffDataValues = new ContentValues();// 初始化差异数据的ContentValues对象用于保存数据的不同之处
}
// 定义SqlData类该类用于处理数据库中的数据
public SqlData(Context context, Cursor c) {
// 获取ContentResolver对象
mContentResolver = context.getContentResolver();
// 设置初始状态为非创建状态
mIsCreate = false;
// 从Cursor对象中读取数据并将数据加载到
loadFromCursor(c);
// 创建一个新的ContentValues对象用于存储数据的差异
mDiffDataValues = new ContentValues();
}
/*该构造函数主要是用于初始化SqlData对象并且在初始化过程中从Cursor对象中读取数据同时创建一个新的ContentValues对象以备后续存储数据的差异。*/
/*定义了一个私有方法loadFromCursor该方法接收一个Cursor对象作为参数并且在该方法中从Cursor对象中读取数据将这些数据加载到SqlData对象中。*/
// 从Cursor对象中读取数据并将数据加载到SqlData对象中
private void loadFromCursor(Cursor c) {
// 从Cursor对象中读取数据id
mDataId = c.getLong(DATA_ID_COLUMN);
// 从Cursor对象中读取数据类型
mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
// 从Cursor对象中读取数据内容
mDataContent = c.getString(DATA_CONTENT_COLUMN);
// 从Cursor对象中读取数据内容的第一个数据项
mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);
// 从Cursor对象中读取数据内容的第三个数据项
mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
}
public void setContent(JSONObject js) throws JSONException {
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;
/*该方法主要是用于从Cursor对象中读取数据并将这些数据加载到SqlData对象的相关成员变量中。其中数据的读取顺序和类型需要与Cursor对象中的列名一一对应。*/
public void setContent(JSONObject js) throws JSONException {// 设置SqlData对象的内容
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;// 从JSONObject对象中获取数据id
if (mIsCreate || mDataId != dataId) {
mDiffDataValues.put(DataColumns.ID, dataId);
}
mDataId = dataId;
mDataId = dataId; // 如果当前SqlData对象是创建状态或者数据id与当前对象的数据id不同将数据id加入到差异数据值对象中
//setContent方法的主要部分用于设置SqlData对象的各个成员变量值并且在设置过程中检查差异数据。
String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE)
: DataConstants.NOTE;
if (mIsCreate || !mDataMimeType.equals(dataMimeType)) {
mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType);
}
mDataMimeType = dataMimeType;
// 从JSONObject对象中获取数据类型并将其设置为SqlData对象的数据类型
String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : "";
if (mIsCreate || !mDataContent.equals(dataContent)) {
mDiffDataValues.put(DataColumns.CONTENT, dataContent);
}
mDataContent = dataContent;
// 从JSONObject对象中获取数据内容的第一个数据项并将其设置为SqlData对象的数据内容的第一个数据项
long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0;
if (mIsCreate || mDataContentData1 != dataContentData1) {
mDiffDataValues.put(DataColumns.DATA1, dataContentData1);
}
mDataContentData1 = dataContentData1;
// 从JSONObject对象中获取数据内容的第三个数据项并将其设置为SqlData对象的数据内容的第三个数据项
String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : "";
if (mIsCreate || !mDataContentData3.equals(dataContentData3)) {
mDiffDataValues.put(DataColumns.DATA3, dataContentData3);
}
mDataContentData3 = dataContentData3;
}
/*JSONObjectSqlData
SqlDataJSONObject
*/
public JSONObject getContent() throws JSONException {
if (mIsCreate) {
Log.e(TAG, "it seems that we haven't created this in database yet");
@ -143,6 +181,11 @@ public class SqlData {
js.put(DataColumns.DATA3, mDataContentData3);
return js;
}
/*getContent()JSONObject
JSONException
mIsCreate boolean true nullJSONObjectmDataIdmDataMimeTypemDataContentmDataContentData1mDataContentData3
JSONObject*/
public void commit(long noteId, boolean validateVersion, long version) {
@ -182,8 +225,21 @@ public class SqlData {
mDiffDataValues.clear();
mIsCreate = false;
}
/*commit()
noteId long ID;
validateVersion boolean ;
version long
mIsCreatebooleantrue
mDiffDataValues DataColumns.ID
DataColumns.NOTE_ID noteIdmDiffDataValuesNotes.CONTENT_DATA_URIUriUri ID mDataId
ID ActionFailureException
mIsCreate false
mDiffDataValuesmContentResolver.update()
validateVersion falseNoteColumns.VERSIONversionNoteColumns.IDnoteId
mDiffDataValuesmIsCreate false*/
public long getId() {
return mDataId;
}
}//定义了一个名为getId()的方法返回一个long类型的值表示当前笔记的ID。
//直接返回成员变量mDataId因此不会引发任何异常。
}
6

@ -2,6 +2,7 @@
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
#
#Fri Apr 07 12:55:13 CST 2023
sdk.dir=D\:\\Androidsdk
# For customization when using a Version Control System, please read the
# header note.
#Fri Apr 07 14:41:10 CST 2023
sdk.dir=D\:\\SDK

Loading…
Cancel
Save