AndroidでつくるEvernote連携アプリ

第3回 Evernoteにノートを作る

この記事を読むのに必要な時間:およそ 4 分

前回は Evernoteのサーバに対して認証を行うところまでを実装しました。今回はユーザの認証情報を元に,ノートを作成するところまで進めます。

はじめに,Evernoteのデータモデルについて簡単に記載します。

Evernoteのデータモデル

Evernoteのデータモデル

上記はEvernoteの開発者向け公式サイトから転載したデータモデルの概要図ですが,大きく分けてユーザの情報(左側)とノートの情報(右側)があり,ノートの情報には

  • ノートブック
  • ノート
  • リソース
  • タグ
  • 保存された検索(SavedSearch)

といったデータがあるのがわかるかと思います。これらの各データはすべて「guid」と呼ばれる固有のidを保持しており,guidによって一意に特定することが可能です。

今回はシンプルに題名・本文だけのノートの作成をしますので,必要な情報はノートとノートブックだけです。

ノートとノートブックの関係

すべてのノートはいずれか1つのノートブックに所属することになります。ノートにはノート自身のguid,タイトル,本文といった情報の他にノートが属しているノートブックのguidを格納していて,これによりノートとノートブックの関連性を定義しています。

ノートとノートブックの関係

ノートとノートブックの関係

1つのノートが複数のノートブックに属することはできず,明示的に指定しない場合はデフォルトのノートブックに保存されます。ノートやノートブックには他にも沢山の属性があります。本連載でも追って紹介していきますが,詳細な情報は公式の開発者サイト「Evernoteのデータモデル」⁠網羅的な情報は公式リファレンスで確認してください。

ENML:Evernote Markup Language

次にノートの本文の形式について説明します。

Evernoteのノートの本文は,ENML(Evernote Markup Language)と呼ばれるXHTMLのサブセットベースの独自マークアップ言語で記述しなければいけません。たとえ本文にテキストが必要のないアプリ(例: 写真を保存するだけのアプリ)でも,本文のフォーマットはENML形式に従う必要があります。XHTMLのタグのうちどれが使用可能かと,ENMLタグ独自の記述方法をおさえておく必要があります。

ENML文書の最小構成は以下のようになります。

ENMLのテンプレート

<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
ここにコンテンツを記載
</en-note>

1行目の宣言部分はなくてもかまいませんが,ノートの本文は必ず<en-note>タグで囲まれている必要があります。

この<en-note>までの開始タグまでと,</en-note>の閉じタグについてはそれぞれEvernoteUtil.NOTE_PREFIX と EvernoteUtil.NOTE_SUFFIX で呼び出すことができますので, ノートの本文の内容(content)についてはコンテンツをENMLの構文で記載した後

content = EvernoteUtil.NOTE_PREFIX + content + EvernoteUtil.NOTE_SUFFIX;

のようにしてENML文書を作成しておくのが良いでしょう。

またcontentがプレーンテキストで改行したいブロックごとにdiv要素で囲うことが推奨されています。

ENMLで使用できるXHTMLのタグ一覧については公式デベロッパーサイトのENMLの項目を参照ください。

ノートを作ってみる

それでは実際にノートを作ってみましょう。

前回最後に表示したメニュー画面(MenuFragment)において"Create a new note"をタッチすると,下記のノート作成画面に遷移するようにします。

SimpleNoteFragmentの画面

SimpleNoteFragmentの画面

今回は

MainActivity
├ MenuFragment
├ SimpleNoteFragment
:

のように大元のActivityの上に各機能をFragmentとして乗せる設計にしていますので,MenuFragmentで各アイテムが押下された際にMainActivityに通知してやる必要があります。

具体的にはMenuFragment側で各アイテムが押された際に,⁠リストの何番目のアイテムが押されたか」を引数に呼ばれるListenerをInterfaceとして定義してやり,

MenuFragment.java

OnMenuItemSelectedListener mListener; 
:
    public interface OnMenuItemSelectedListener {
        public void onMenuItemSelected(int pos);
    }
:
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        mListener.onMenuItemSelected(position);
    }

MainActivity側で,渡された番号に応じて対応するFragmentにreplaceするようにonMenuItemSelectedを実装してやればOKです。

MainActivity.java

@Override
public void onMenuItemSelected(int position) {
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    switch (position) {
        case 0:
            ft.replace(R.id.fragment_container, new SimpleNoteFragment(), "SimpleNote");
            break;
        default:
            ;
    }
…省略…
}

今回はノート作成画面で

  • 保存するノートブックの選択
  • タイトルの指定
  • 本文の指定

を行えるようにします。

以下,ユーザのノートに対する操作は基本的にすべて,前回取得したユーザのセッション情報のオブジェクトを元に行っていきます。

著者プロフィール

赤木法生(あかぎのりお)

日本の通信事業者所属でシステム開発に従事。大規模開発のSEを担当しつつ,個人でAndroidやスマホ向けAPIのサーバサイドプログラミングを行っています。メインはAndroidでPython,JavaScriptも触り中。現在はシリコンバレーのベンチャー企業にてトレーニー中。開発者向けのSDKと格闘しています。

https://github.com/redtree1112

コメント

コメントの記入