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.
abc/src/Date/MetaData.java

132 lines
4.3 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.

/*
* 版权所有 (c) 2010-2011MiCode 开源社区 (www.micode.net)
* 根据 Apache 许可证 2.0 版本("许可证")授权;
* 除非符合许可证的规定,否则不得使用本文件。
* 您可以从以下网址获取许可证副本:
* http://www.apache.org/licenses/LICENSE-2.0
* 除非适用法律要求或书面同意,本软件按"原样"分发,
* 没有任何明示或暗示的保证或条件。
* 详见许可证中规定的权限和限制。
* 这是一份标准的Apache许可证2.0版本的开源声明)
*/
// 定义MetaData类所在的包路径
package net.micode.notes.gtask.data;
// 导入Android数据库Cursor类
import android.database.Cursor;
// 导入Android日志工具类
import android.util.Log;
// 导入应用中自定义的字符串工具类
import net.micode.notes.tool.GTaskStringUtils;
// 导入JSON处理相关类
import org.json.JSONException;
import org.json.JSONObject;
/**
* MetaData类 - 继承自Task类
* 功能处理Google Tasks元数据信息
* 特性:
* 1. 存储关联任务的GIDGoogle ID
* 2. 将元数据信息以JSON格式存储在notes字段中
* 3. 仅用于远程数据同步,不支持本地操作
*/
public class MetaData extends Task {
// 日志标签,使用类名作为标识
private final static String TAG = MetaData.class.getSimpleName();
// 存储关联任务的Google ID
private String mRelatedGid = null;
/**
* 设置元数据信息
* @param gid 关联任务的Google ID
* @param metaInfo 包含元数据的JSON对象
*/
public void setMeta(String gid, JSONObject metaInfo) {
try {
// 将GID添加到元数据JSON中
metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
} catch (JSONException e) {
Log.e(TAG, "failed to put related gid"); // 记录错误日志
}
// 将JSON对象转为字符串存储到notes字段
setNotes(metaInfo.toString());
// 设置固定名称标识这是一个元数据任务
setName(GTaskStringUtils.META_NOTE_NAME);
}
/**
* 获取关联任务的Google ID
* @return 关联GID可能为null
*/
public String getRelatedGid() {
return mRelatedGid;
}
/**
* 判断是否值得保存
* @return notes字段不为空时返回true
*/
@Override
public boolean isWorthSaving() {
return getNotes() != null;
}
/**
* 从远程JSON数据设置内容
* @param js 包含远程数据的JSON对象
*/
@Override
public void setContentByRemoteJSON(JSONObject js) {
// 先调用父类方法处理基础字段
super.setContentByRemoteJSON(js);
// 如果notes字段不为空解析其中的GID
if (getNotes() != null) {
try {
// 将notes字符串转为JSON对象
JSONObject metaInfo = new JSONObject(getNotes().trim());
// 从JSON中获取关联GID
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
} catch (JSONException e) {
Log.w(TAG, "failed to get related gid"); // 记录警告日志
mRelatedGid = null; // 解析失败时重置GID
}
}
}
/**
* 从本地JSON设置内容不支持
* @param js JSON对象
* @throws IllegalAccessError 总是抛出此异常
*/
@Override
public void setContentByLocalJSON(JSONObject js) {
// 元数据不应从本地JSON设置直接抛出异常
throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");
}
/**
* 获取本地JSON内容不支持
* @throws IllegalAccessError 总是抛出此异常
*/
@Override
public JSONObject getLocalJSONFromContent() {
// 元数据不应生成本地JSON直接抛出异常
throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");
}
/**
* 获取同步动作(不支持)
* @param c 数据库Cursor
* @throws IllegalAccessError 总是抛出此异常
*/
@Override
public int getSyncAction(Cursor c) {
// 元数据不支持同步动作查询,直接抛出异常
throw new IllegalAccessError("MetaData:getSyncAction should not be called");
}
}