/* * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //定义该类所在的包。包是 Java 中组织类的方式,有助于代码的组织和管理。 package net.micode.notes.gtask.data; //导入 Android 的 Cursor 类,Cursor 是用于访问和操作数据库查询结果的工具。 import android.database.Cursor; //导入 Android 的 Log 类,用于在代码中输出日志信息。 import android.util.Log; //导入一个自定义的工具类 GTaskStringUtils,它包含与 Google Tasks 相关的常量和方法。 import net.micode.notes.tool.GTaskStringUtils; //导入 JSON 处理类。JSONObject 用于创建和解析 JSON 数据,JSONException 用于捕获解析 JSON 时的错误。 import org.json.JSONException; import org.json.JSONObject; //定义一个公共类 MetaData,该类继承自 Task 类,表示与 Google 任务相关的元数据(例如任务的 gid)。 public class MetaData extends Task { //定义一个 TAG 字符串常量,存储当前类的简短类名 "MetaData",用于在日志中输出调试信息。 private final static String TAG = MetaData.class.getSimpleName(); //声明一个私有成员变量 mRelatedGid,用于保存与任务相关的 Google 任务 ID(gid)。初始值为 null。 private String mRelatedGid = null; // 定义一个公共方法 setMeta,用于设置任务的元数据。接收两个参数: // gid:一个字符串,表示任务的 Google ID。 // metaInfo:一个 JSONObject,包含其他元数据(如任务的附加信息)。 public void setMeta(String gid, JSONObject metaInfo) { // 尝试将传入的 gid 插入到 metaInfo 中。GTaskStringUtils.META_HEAD_GTASK_ID 是用于存储任务 ID 的常量。 // 如果插入失败,捕获 JSONException 异常并打印错误日志。 try { metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); } catch (JSONException e) { Log.e(TAG, "failed to put related gid"); } //将 metaInfo 转换为字符串并调用 setNotes() 方法保存。这将任务的元数据作为字符串保存在任务的 notes 字段中。 setNotes(metaInfo.toString()); //调用 setName() 设置任务的名称为 GTaskStringUtils.META_NOTE_NAME。这个名称可能是一个预定义的常量,表示任务的默认名称。 setName(GTaskStringUtils.META_NOTE_NAME); } //定义一个公共方法 getRelatedGid,用于获取与任务相关的 Google 任务 ID。 // return mRelatedGid;:返回之前保存的 mRelatedGid。 public String getRelatedGid() { return mRelatedGid; } //@Override:表示该方法是重写父类 Task 中的方法。 //public boolean isWorthSaving():定义一个方法 isWorthSaving,用于判断当前任务是否值得保存。通常,它会根据某些条件来判断任务是否需要被同步或保存到数据库中。 //return getNotes() != null;:判断任务的 notes 字段是否为 null。如果 notes 字段不为空,说明任务有有效内容,返回 true;否则返回 false。 @Override public boolean isWorthSaving() { return getNotes() != null; } @Override //定义方法 setContentByRemoteJSON,用于从远程获取 JSON 数据并设置任务内容。 public void setContentByRemoteJSON(JSONObject js) { //调用父类的同名方法来处理远程 JSON 数据的基本设置。 super.setContentByRemoteJSON(js); //检查任务的 notes 字段是否不为空。 if (getNotes() != null) { //如果 notes 不为空,尝试将其转换为 JSONObject。 //然后,从中提取出 gid 并保存到 mRelatedGid 中。 // 如果解析过程中出现错误(例如格式问题),会捕获 JSONException 并输出警告日志,同时将 mRelatedGid 设为 null。 try { JSONObject metaInfo = new JSONObject(getNotes().trim()); mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID); } catch (JSONException e) { Log.w(TAG, "failed to get related gid"); mRelatedGid = null; } } } //@Override: //public void setContentByLocalJSON(JSONObject js): //throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");: @Override //该方法定义了从本地 JSON 数据设置任务内容的行为。 public void setContentByLocalJSON(JSONObject js) { // this function should not be called //该方法被设计为不可调用,如果被调用,抛出 IllegalAccessError 异常。 // 该类不允许使用本地 JSON 数据设置任务内容,因此抛出异常来提醒开发者 throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); } //表示重写父类的方法。 @Override //该方法定义了获取本地 JSON 数据的行为。 public JSONObject getLocalJSONFromContent() { //与 setContentByLocalJSON 类似,该方法不应该被调用,如果被调用,抛出 IllegalAccessError 异常. throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); } //表示重写父类的方法。 @Override //定义获取同步操作的方法,通常会返回一个与同步操作相关的标志值。 public int getSyncAction(Cursor c) { //该方法不应被调用,抛出 IllegalAccessError 异常。 throw new IllegalAccessError("MetaData:getSyncAction should not be called"); } }