スキップしてメイン コンテンツに移動

投稿

9月, 2013の投稿を表示しています

JavaではてなAPIのOAuth

あらすじ ここのドキュメントにあるお話をJavaでやってみようと ・Consumer key を取得して OAuth 開発をはじめよう - Hatena Developer Center http://developer.hatena.ne.jp/ja/documents/auth/apis/oauth/consumer サンプルコードもあるんですけど、Perl版とRuby版しかなくてどっちもあまりやったことないので一筋縄にいきませんでした。 OAuthのJavaライブラリ OAuthのライブラリは、oauth-signpostを使いました。 ・oauth-signpost - Simple OAuth message signing for Java - Google Project Hosting http://code.google.com/p/oauth-signpost/ アクセストークン取得までは、GitHubにあるTwitterのサンプルですが、これを参考にサクッと取得ができました。 ・signpost-examples/OAuthTwitterExample/src/TwitterMain.java at master · mttkay/signpost-examples · GitHub https://github.com/mttkay/signpost-examples/blob/master/OAuthTwitterExample/src/TwitterMain.java

Android JUnit testかJUnit testかでログの出力先を切り替える

テスト駆動開発でコーディング、テスト、リファクタリングというサイクルを素早く回す必要があるのですが、Eclipse上のAndroidでやる場合Android JUnit testは端末へのインストール処理を挟むためどうしても起動が遅いです。 起動で一呼吸している間にモチベーションや集中がどっかへ行ってしまいます。そのため、極力ロジック部分を切り離して(Androidを含まない)JUnit testとして起動した方が光の速さで起動するので良いと思います。それに伴って、特に意識せずにAndroidとロジック部分の結合度も下がるというメリットもあります ※「特に意識せず」というのはAndroidのクラス利用しようとしてたらコンパイラが指摘するから ただ問題なのがログですね。テスト対象のクラスに埋め込むandroid.util.LogのLog.v("tag", "message")という感じで使うLogcatに表示してくれるメソッドは、JUnit testで起動するとエラーが出ます。使えるようにする方法もあるのかもしれませんが、以下のようなやり方を思いついたので掲載しておきます。 Log.vの箇所に下記のようなクラスを利用します。システムプロパティの文字を判定して、Log.vかSystem.out.printlnかをif文で分岐させてるだけです。 import android.util.Log; public class MyLog { private static String runtime = System.getProperty("java.runtime.name"); public static void v(String tag, String msg) { if(0 <= runtime.indexOf("Android")) { Log.v(tag, msg); } else { System.out.println(tag + ":" + msg); } } } ちなみに

Android API Level 16でアクションバーの色が変らないメモ

values-11やそれ以前からコピぺしたきたstyles.xmlを使ってると、どこがダメなんだよ!と小一時間考えてしまったのでメモしておきます。 values-14のstyle.xmlは以下の通り。基本的には、「android:」で開始されるitem名にしないと適用されないという結論です。 <style name="AppTheme" parent="Theme.Sherlock.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/Widget.MyTheme.ActionRed</item> </style> <style name="Widget.MyTheme.ActionBar.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title"> <item name="android:textColor">#ffffff</item> </style> <style name="Widget.MyTheme.ActionRed" parent="Widget.Sherlock.ActionBar"> <item name="android:background">#FF2222</item> <item name="android:icon">@drawable/action_log</item> <item name="android:titleTextStyle">@style/Widget.MyTheme.ActionBar.TitleTextStyle</item> </style> ※ActionBarSherl

JumblrでPhotoSetとEclipse実行とコマンドプロンプト実行で挙動が異なるなど

Tumblr APIのJavaライブラリJumblrが公開されていて、それを使っていろいろとやってみているところです。なかなか一筋縄にいかないです。 PhotoSetの投稿 まずPhotoSetですが、1つの投稿に複数の写真を入れるやつです。GitHubのmasterに公開されているものには実装されていません。photo_postブランチの方に実装されています。 ・tumblr/jumblr · GitHub https://github.com/tumblr/jumblr/tree/photo_post 注意しないといけないのが、ブランチの方はmaster側に実装されているものが入ってなかったりするので、Photo.java、PhotoPost.java、PhotosetPost.javaをとってくるなどしてmasterに良い感じにマージしてやる必要があります。 また、このPhotosetPost.javaはレイアウトの指定ができないので、下記のようなレイアウトが自由に選べません。投稿すると勝手なレイアウトが割り当てられます。 Photo Setのレイアウトは、 ・Photo set のレイアウトの指定 - p’s diary http://d.hatena.ne.jp/poochin/20120329/1332994978 こちらで書かれているように、数字の羅列を一緒に送ってやれば良いそうです。なのでPhotoPost.javaを開いて、以下のdetailメソッドのようにphotoset_layoutを追加してやれば、レイアウトも指定できます。 /** * Get the detail for this post (and the base detail) * @return the details */ @Override public Map<String, Object> detail() { Map<String, Object> details = super.detail(); details.put("type", "photo"); details.put("link", link);

Evernoet連携のAndroidアプリ「Note Linker」バージョン0.1をリリースしました

Note LinkerはEvernoteのノートリンクを集めた目次(ノート)を作成する無料アプリです。 Windows クライアントでのイメージ ノートを目次としてまとめる事で、ノートを探す手間を減らすことができます。 アプリのホーム画面 アプリの目次閲覧画面 このアプリの特徴的な部分は、目次の元となるノートに バックリンクを挿入 することができる点です。ブログのような感覚でリンクを辿ることで、スムーズにノートを閲覧できます。 Evernoteに旅行の写真とか入れてる方は旅行アルバムの目次として、アイデアをとりあえず突っ込んでる方はアイデア集の目次として作成すれば、あのノートどこへやったっけ?という手間の軽減にお役に立てると思います。 ダウンロード ・ Note Linker ヘルプページ ご意見・ご感想・不具合のご報告などお気軽のお問い合わせください。お問い合わせ方法は、 このブログのコメント欄 Twitter ヘルプページのコメント欄 (どの記事でも) メール また、Google Playでの評価をお待ちしておりますm(_ _)m

Android 現状の見てる状態の画面回転をロック

Android端末でごちゃごちゃ処理している時に画面を回転させると、onDestroyが呼ばれActivityが再生成されて面倒なわけですが、ちょっとした処理を待たせるような時はActivity再生成の対策を考えるよりは画面を固定してしまった方が面倒なことも少ない。というわけで、ググってみるとあまりコレだ!という感じのがなかなか出てこないのでメモしておきます。 まあ、(たぶん)昔の端末は画面の回転は縦か横かだったのが、最近のは画面の向きに即して4パターン変る仕様になったのと & ユーザ側で画面をロックしたいなどのアプリ利用でのノウハウもあってすぐに出てこないと言った感じでしょうか。 こちらに、ありがたいメソッドがあるのですが、 ・Androidで回転を固定にしたり解除したりする方法について : 新・開発者の戯言 http://blog2.kojin.biz/2010/04/23/androidで回転を固定にしたり解除したりする方法につ/  これは、縦か横かの固定なので、Android 2.1と2.3とかの端末だとうまく行くのですが、Nexus 7とかを逆の縦(逆の横)に向けておいて、このメソッドを走らせると画面がくるんと回って固定されてしまうわけです。そして解除するとくるんと元に戻る。 そういうのもひっくるめていいやり方がありました。 ・How to Lock screen orientation when displaying reverse landscape in android? - Stack Overflow http://stackoverflow.com/questions/6410237/how-to-lock-screen-orientation-when-displaying-reverse-landscape-in-android autremoiさんの回答でlockScreenOrientation()のメソッド。4パターン判定して固定しています。Surface.ROTATION_180とSurface.ROTATION_270に直接値が入ってますが、これはSCREEN_ORIENTATION_REVERSE_PORTRAITとSCREEN_ORIENTATION_REVERSE_LANDSCAPEがAPI Le

AsyncTaskの実行中にProgressDialog表示させ画面回転させるとIllegalArgumentException

よくやるやつ。 Activity上でAsyncTaskを継承したクラスのインスタンスを生成。このクラスのコンストラクタでProgressDialogのインスタンスを生成してダイアログを表示。onPostExecuteでダイアログをdismiss()する。このdismissするまでに画面を回転させると、 java.lang.IllegalArgumentException: View not attached to window manager という例外が発生します。対策の一つとして、そもそも画面を回転させないというのもあり、過去のアプリにもやりましたが、それ以外のとりあえずの対応として、ProgressDialogの処理をActivityにやらせることにしました。 AsyncTaskのインスタンスを生成する前にActivity上にProgressDialogのインスタンスを生成して、AsyncTaskの処理終りにdismiss()。あと、ActivityのonDestroyが走った時に、ダイアログが開いてればdismiss()というやり方でとりあえず手持ちの端末では例外は発生しないようです。 どうやってActivity側からAsyncTaskの処理終りを捕まえるかについてなど処理のイメージは以下のソースで。※手持ちのソースから抜粋したので、コンパイラは通してません。 public class HogeActivity extends Activity { private ProgressDialog mDialog = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hoge); mDialog = new ProgressDialog(this, R.string.msg_loading); mDialog.show(); LoaderTask task = new Loa

署名付きのapkファイルを書き出すとadmobが表示されない(凡ミス)

凡ミスを小一時間悩んだのでのメモしておきます。 Google Playに登録すべくEclipseから署名付きのapkファイルを出力して、Dropbox経由でAndroid端末にインストールしてみると、admobが表示されなくなりました。デバッグ段階では表示されていたのに。 Logcatを見ると、「Cannot find adapter class 'com.google.ads.mediation.admob.AdMobAdapter'. Did you link the ad network's mediation adapter? Skipping ad network.」だの「java.lang.ClassNotFoundException: com.google.ads.mediation.admob.AdMobAdapter」表示されています。ビルドのやり方に問題があるかと思ってましたが、違いました。 admobを表示させるxmlファイルの ads:adUnitIdの値 が違う値でした。admobのサイトにログインしてそこに記述されているパブリッシャー IDにしてやると、うまく表示されました。 こんなミスをする思い当たる節がありませんが、何かしたのでしょう。解決のヒントは以下のリンクよりいただきました。 ・android - What is the class GADMAdapterCustomEvents - Stack Overflow http://stackoverflow.com/questions/12284188/what-is-the-class-gadmadaptercustomevents ちなみに、 ビルドに問題がある場合は、こちら↓のお話が参考になるかもしれません。 ・Yet Another Diary: Androidで外部JarがAPKファイルに取り込まれなくなった時の対処法 http://yasu-2.blogspot.jp/2012/04/androidjarapk.html それにしても、Admobのサイトに依頼数がカウントされているので、何をキーにそのアプリが依頼したんだと疑問も残りますが... [PR] ・ Smartphone Ads iPhone・An