You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rj2201-xiaozuxuexi/gtask.data.Node&Sqldata.txt

285 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

这段代码主要是定义了一个节点类 Node其中包含了一些常量、成员变量和方法用于表示节点的属性和同步操作。
package net.micode.notes.gtask.data; //指定了该类所在的java包为gtask.data
import android.database.Cursor; //导入了 Android 框架中的 Cursor 类,用于在数据库中进行数据检索。
import org.json.JSONObject; //导入了 JSON 库中的 JSONObject 类,用于处理 JSON 数据。
public abstract class Node { //定义了一个抽象类 Node表示一个节点。
public static final int SYNC_ACTION_NONE = 0;
//定义了一个名为 SYNC_ACTION_NONE 的常量,值为 0表示同步操作为无。
public static final int SYNC_ACTION_ADD_REMOTE = 1; //定义常量,表示远程添加同步操作。
public static final int SYNC_ACTION_ADD_LOCAL = 2; //表示本地添加同步操作。
public static final int SYNC_ACTION_DEL_REMOTE = 3;//表示远程删除同步操作。
public static final int SYNC_ACTION_DEL_LOCAL = 4; //表示本地删除同步操作。
public static final int SYNC_ACTION_UPDATE_REMOTE = 5; //表示远程更新同步操作。
public static final int SYNC_ACTION_UPDATE_LOCAL = 6; //表示本地更新同步操作。
public static final int SYNC_ACTION_UPDATE_CONFLICT = 7; //表示更新冲突同步操作。
public static final int SYNC_ACTION_ERROR = 8; //表示同步操作错误。
private String mGid; //声明了一个私有成员变量 mGid用于存储节点的全局唯一标识符。
private String mName; //声明了一个私有成员变量 mName用于存储节点的名称。
private long mLastModified; //声明了一个私有成员变量 mLastModified用于存储节点的最后修改时间。
private boolean mDeleted; //声明了一个私有成员变量 mDeleted用于表示节点是否被删除。
public Node() { //定义了 Node 类的构造函数,初始化成员变量。
mGid = null;
mName = "";
mLastModified = 0;
mDeleted = false;
}
public abstract JSONObject getCreateAction(int actionId);
//声明了一个抽象方法 getCreateAction(),用于获取创建节点的同步操作。
public abstract JSONObject getUpdateAction(int actionId);
//声明 getUpdateAction(),用于获取更新节点的同步操作。
public abstract void setContentByRemoteJSON(JSONObject js);
//声明 setContentByRemoteJSON(),用于根据远程 JSON 数据设置节点内容。
public abstract void setContentByLocalJSON(JSONObject js);
//声明了 setContentByLocalJSON(),用于根据本地 JSON 数据设置节点内容。
public abstract JSONObject getLocalJSONFromContent();
//声明了一个抽象方法 getLocalJSONFromContent(),用于从节点内容获取本地 JSON 数据。
public abstract int getSyncAction(Cursor c);
//声明了一个抽象方法 getSyncAction(),用于从 Cursor 中获取同步操作。
public void setGid(String gid) { //定义了一个公有方法 setGid(),用于设置节点的全局唯一标识符。
this.mGid = gid;
}
public void setName(String name) { //定义了一个公有方法 setName(),用于设置节点的名称。
this.mName = name;
}
public void setLastModified(long lastModified) { //定义了一个公有方法 setLastModified(),用于设置节点的最后修改时间。
this.mLastModified = lastModified;
}
public void setDeleted(boolean deleted) { //定义了一个公有方法 setDeleted(),用于设置节点是否被删除。
this.mDeleted = deleted;
}
public String getGid() { //定义了一个公有方法 getGid(),用于获取节点的全局唯一标识符。
return this.mGid;
}
public String getName() { //定义了一个公有方法 getName(),用于获取节点的名称。
return this.mName;
}
public long getLastModified() { //定义了一个公有方法 getLastModified(),用于获取节点的最后修改时间。
return this.mLastModified;
}
public boolean getDeleted() { //定义了一个公有方法 getDeleted(),用于获取节点是否被删除。
return this.mDeleted;
}
}
package net.micode.notes.gtask.data;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.DataColumns;
import net.micode.notes.data.Notes.DataConstants;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.NotesDatabaseHelper.TABLE;
import net.micode.notes.gtask.exception.ActionFailureException;
import org.json.JSONException;
import org.json.JSONObject;
//以上import导入了所需的Android类和自定义异常以及用于处理JSON数据的类。
public class SqlData { //定义了一个名为 SqlData 的类。
private static final String TAG = SqlData.class.getSimpleName();
//声明了一个私有静态常量 TAG用于在日志中标识类的名称。
private static final int INVALID_ID = -99999;
//声明了一个私有静态常量 INVALID_ID用于表示无效的ID值。
public static final String[] PROJECTION_DATA = new String[] {
DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1,
DataColumns.DATA3
}; //这是一个字符串数组 PROJECTION_DATA用于指定要在查询数据时返回的列。
public static final int DATA_ID_COLUMN = 0;
public static final int DATA_MIME_TYPE_COLUMN = 1;
public static final int DATA_CONTENT_COLUMN = 2;
public static final int DATA_CONTENT_DATA_1_COLUMN = 3;
public static final int DATA_CONTENT_DATA_3_COLUMN = 4;
//以上声明了一组公有静态常量,表示数据列在查询结果中的索引。
private ContentResolver mContentResolver;
private boolean mIsCreate;
private long mDataId;
private String mDataMimeType;
private String mDataContent;
private long mDataContentData1;
private String mDataContentData3;
private ContentValues mDiffDataValues; //声明了一些私有成员变量,用于存储数据的相关信息。
public SqlData(Context context) { //定义了 SqlData 类的构造函数,接受一个 Context 参数。
mContentResolver = context.getContentResolver();
mIsCreate = true;
mDataId = INVALID_ID;
mDataMimeType = DataConstants.NOTE;
mDataContent = "";
mDataContentData1 = 0;
mDataContentData3 = "";
mDiffDataValues = new ContentValues();
} //在构造函数中对成员变量进行初始化
public SqlData(Context context, Cursor c) { //定义了另一个构造函数,接受一个 Context 和一个 Cursor 参数。
mContentResolver = context.getContentResolver();
mIsCreate = false;
loadFromCursor(c);
mDiffDataValues = new ContentValues();
} //在第二个构造函数中对成员变量进行初始化,并调用 loadFromCursor() 方法加载数据。
private void loadFromCursor(Cursor c) { //定义了一个私有方法 loadFromCursor(),接受一个 Cursor 参数。
mDataId = c.getLong(DATA_ID_COLUMN);
mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
mDataContent = c.getString(DATA_CONTENT_COLUMN);
mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);
mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
} //从 Cursor 中读取数据,并将其存储到相应的成员变量中。
public void setContent(JSONObject js) throws JSONException {
//定义了一个公有方法 setContent(),接受一个 JSONObject 参数,并可能抛出 JSONException 异常。
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;
if (mIsCreate || mDataId != dataId) {
mDiffDataValues.put(DataColumns.ID, dataId);
}
mDataId = dataId;
//从 JSON 对象中读取数据,并将其存储到相应的成员变量中。
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;
String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : "";
if (mIsCreate || !mDataContent.equals(dataContent)) {
mDiffDataValues.put(DataColumns.CONTENT, dataContent);
}
mDataContent = dataContent;
long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0;
if (mIsCreate || mDataContentData1 != dataContentData1) {
mDiffDataValues.put(DataColumns.DATA1, dataContentData1);
}
mDataContentData1 = dataContentData1;
String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : "";
if (mIsCreate || !mDataContentData3.equals(dataContentData3)) {
mDiffDataValues.put(DataColumns.DATA3, dataContentData3);
}
mDataContentData3 = dataContentData3;
} //从 JSON 对象中读取数据,并将其存储到相应的成员变量中。
public JSONObject getContent() throws JSONException { //定义了一个公有方法 getContent(),可能抛出 JSONException 异常。
if (mIsCreate) {
Log.e(TAG, "it seems that we haven't created this in database yet");
return null;
}
JSONObject js = new JSONObject();
js.put(DataColumns.ID, mDataId);
js.put(DataColumns.MIME_TYPE, mDataMimeType);
js.put(DataColumns.CONTENT, mDataContent);
js.put(DataColumns.DATA1, mDataContentData1);
js.put(DataColumns.DATA3, mDataContentData3);
return js;
} //根据成员变量的值创建一个 JSON 对象,并返回
public void commit(long noteId, boolean validateVersion, long version) { //定义了一个公有方法 commit(),接受三个参数。
if (mIsCreate) {
if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) {
mDiffDataValues.remove(DataColumns.ID);
}
mDiffDataValues.put(DataColumns.NOTE_ID, noteId);
Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues);
try {
mDataId = Long.valueOf(uri.getPathSegments().get(1));
} catch (NumberFormatException e) {
Log.e(TAG, "Get note id error :" + e.toString());
throw new ActionFailureException("create note failed");
}
} else {
if (mDiffDataValues.size() > 0) {
int result = 0;
if (!validateVersion) {
result = mContentResolver.update(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null);
} else {
result = mContentResolver.update(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues,
" ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE
+ " WHERE " + NoteColumns.VERSION + "=?)", new String[] {
String.valueOf(noteId), String.valueOf(version)
});
}
if (result == 0) {
Log.w(TAG, "there is no update. maybe user updates note when syncing");
}
}
}
//根据条件执行插入或更新操作。
mDiffDataValues.clear();
mIsCreate = false;
}
//清除变更数据并将 mIsCreate 设置为 false。
public long getId() {
return mDataId;
}
}