【Evernote API】androidアプリ内でノートの検索を行いたいとき

遅ればせながら明けましておめでとうございます。
新年一発目から残念なつまずきをしたので、自戒を込めてメモ。


Androidアプリ上で、ノートの検索をしようと思った。
ので、早速evernote-sdk-androidを落としてサンプルを走らせると、
画像のアップロードとノートの新規作成はできるものの、肝心のノート検索ができない。

以下、経緯

  • 1: findNotesByQueryのtry節でエラー有り
  • 2: 見ると「Error listing notes. java.lang.reflect.InvocationTargetException」とでてる
  • 3: getCauseで更に原因とると「EDAMUserException(errorCode:PERMISSION_DENIED, parameter:authenticationToken)」
  • 4: ??「PERMISSION_DENIED」権限の問題??
  • 5: 公式に「ベーシックアクセスのキーは検索やノートの読み取りを 含まない 限られた数の操作しか行うことはできません。」との一文が…
    http://dev.evernote.com/intl/jp/doc/articles/common_errors.php
  • 6: フルアクセスのキーを取得し直してあっさり解決/^0^\

結論:
ドキュメントはきちんと読む!


【tumblr API】tumblrのxAuth申請

tumblrのアプリ作りたいなーと前々から思いつつすごく時間経ってた…。


まず、APIを触るにはkeyとか色々必要だろうなと調べてみると、
Tumblr APIを使うためにAPIkeyを取得する

上記の通りさくっとアプリ登録完了。

で認証方法がOAuth以外にxAuthというのが使えるらしい。(どう違うのか…??)
そしてxAuthはtumblr側にメールで申請する必要がある。

申請方法、登録したアプリの下に小さく「Request xAuth」とあるのをクリックするとメーラーへとぶので、
xAuthの許可下さいっっといった内容のメールを送信すればok。
(まだ認証メールきてないからわかんないけど..。)


【android】canvasでアニメーション

scheduleAtFixedRateで周期管理して、
invalidateかpostInvalidateで画面更新するのが一般的のよう。

参考:


GraphicView.java

package com.example.myapp_sample_11_canvas_animattion;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.View;

public class GraphicView extends View {

    private int x = 0;
    private ScheduledExecutorService ses = null;
    
    //再描画のメソッド
    private final Runnable task = new Runnable(){
        @Override
        public void run() {
            // 移動処理
            x += 1;
 
            // 画面を更新
            postInvalidate();
            
            //アニメーションを停止する
            if (x > 600) {
                onPause();
            }
        }
    };
    
    //コンストラクタ
    public GraphicView(Context context) {
        super(context);
    }
    
    public void onResume(){
        // タイマーの作成
        ses = Executors.newSingleThreadScheduledExecutor();
 
        // 一定時間ごとにRunnableの処理を実行
        //   => scheduleAtFixedRate(Runnableオブジェクト , 最初の実行時間 , 実行の周期 , 値の単位(列挙型TimeUnitの値) )
        ses.scheduleAtFixedRate(task, 0L, 5L, TimeUnit.MILLISECONDS);
    }
 
    public void onPause(){
        if (ses != null) {
			// タイマーを停止する
        	ses.shutdown();
        	ses = null;
		}
    }

    @Override
    protected void onDraw(Canvas canvas) {
        //super.onDraw(canvas);
        
        //Paint , Rectオブジェクトの生成
        Paint paint = new Paint();
        Rect rect = new Rect(100 + x, 200 , 300 + x , 400);

        //描画色の指定
        paint.setColor(Color.parseColor("#ace3d2"));
        //四角形の描画
        canvas.drawRect(rect, paint);
    }
}

追記:
onPauseを修正。アプリ終了時などにsesがnullpointerexceptionでエラーがでてしまうので、
if文にて制御した。

MainActivity.java

package com.example.myapp_sample_11_canvas_animattion;

import com.example.myapp_sample_11_canvas_animattion.R;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {
    
    private GraphicView graphicView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //GraphicViewのオブジェクト生成
        graphicView = new GraphicView(this);
        setContentView(graphicView);
    }

    @Override
    protected void onPause() {
        // TODO 自動生成されたメソッド・スタブ
        super.onPause();
        
        graphicView.onPause();
    }

    @Override
    protected void onResume() {
        // TODO 自動生成されたメソッド・スタブ
        super.onResume();
        
        graphicView.onResume();
    }
}

Screenshot_2013-10-28-06-12-43