2012年11月18日日曜日

Lightbox_meでOverlayが残ってしまう

皆さんもご存知だと思います。
Lightbox_meプラグインを僕も最近使いました。

使っていて気付いたことがあります。
Overlay要素がcloseしても消えないでdisplay:none状態で残っています。

使い方が悪いのか、仕様なのか、
Ajaxで取得した以下のようなhtmlをLightbox_meするとOverlayがdisplay:noneにならずに残ってしまい、クリックなどができなくなってしまう問題が発生しました。

■やりたいこと
フォームのプレビュー画面を出したい。

Lightbox_meしているボタンをクリックすると以下のAjax通信が始まって
読み込んで来たHTMLをさらにLightbox_meするという操作で。

しかし、キャンセル(close)すると問題がおきる。
操作が効かなくなるんです。

$.get('preview', {}, function(res){
  $(res).lightbox_me();
});

resには以下のようななHTMLソースコードが入ってます。
------Ajaxで読み込んで来た要素------
<div id="preview">
 ....
</div>
---------------------------------------------

デベロッパーコンソールで見てみるとOverlay要素がのこっていました。
しかもそれがdisplay:noneになっていなかった。


どうやら、Lightbox_meはOverlayをhide()するようです。
destroyOnCloseオプションを使えば消えるけど、表示内容まで消しちゃうから再利用できない。

Lightbox_meのソースコードを見てみるとOverlayはhide()するか表示要素と一緒に消す
ことしかできないことがわかったから。
ちょっと書き換えてみました。

125行目をコメントアウトしてOverlayを消すようにしました。
※オプションにした方が使いやすそう...


                    //$self.add($overlay).hide();
            $self.hide();
            $overlay.remove();

もし使い方が間違ってたならご指摘をお願いいたします。

2012年10月12日金曜日

Mountain LionでXcodeのCommand Line Toolsをインストール

MacPortsをインストールしてもXcodeでCommand Line Toolsをインストールしないと

portコマンドが機能しません。

Command Line Toolsインストールの手順は以下の通り。

Xcodeインストール→Xcode起動→環境設定→Downloads→Command Line Toolsを選択→インストールクリック

これでめでたくportコマンドが使えるようになりました。

以上です。

2012年7月7日土曜日

ロリポップサーバにmagentoをインストールする

ECサイトを作ってみたくてロリポップを契約した。

インストールには以下のサイトがすごく役に立ちました。
「参考サイト」http://ameblo.jp/go2park4kids/entry-11031177903.html

大まかには上記のサイトで書かれている手順でいいですが、
日本語化という点においては手順を変えます。

ロリポップにmagentoをインストール後にmagentoコネクト経由で
日本語ファイルをインストールしようとしたら、503エラーページが
表示されて以降magentoにアクセスできなくなりましたorz

そこで日本語化を踏まえて以下のようにインストール手順を変えました。

1、公式サイトからcommunity editionをダウンロードし解凍します。
2、次に日本語化用のファイルをダウンロードします。今回使ったのはgitHubに上がっているrack990の翻訳ファイルです。ダウンロードします。
3、2でダウンロードしたファイルを解凍するとjp_JPディレクトリがあるのでそれを1で解凍したmagento/app/locale/に入れます。デフォルトでen_ENが入っていることろです。
4、インストール後に管理画面で一部アクセスできなくなるのを防ぐために先に修正をします。このサイトを参考に適切にcacheディレクトリを指定します。
5、ここまで準備ができたらFTPクライアントでロリポップサーバにファイルを全てアップロードします。詳しくは参考サイトを見て下さい。
6、アップロード後のインストール作業は参考サイトをよく読んで行って下さい。
7、インストールが終わればおkです。私の場合は.htaccessファイルがアップロードされずに以下のような問題が発生しました。

【発生した問題】
「お使いのサーバは正しく設定されていません。そのため設定ファイルの機密情報が外部からアクセスされてしまいます。サーバ管理者にご連絡ください。」


上記のメッセージがインストール後に表示されました。
いろいろ調べると既にMagento-JPで質問されており原因は.htaccessがなくて機密ファイルへアクセスできる状態とのことでした。
対策としては.htaccessファイルを追加してやればおkです。
できればFTPアップロードするときに一緒に上げておきたいですね。

これでようやく無事にインストールできました+:。ヾ(o・ω・)ノ゜.+

2012年7月6日金曜日

Javaでオレオレ証明書のサーバに対してhttpsアクセス

テストでローカルのオレオレ署名のサーバにhttpsアクセスしたいのでウェブでサンプルを探したけど、非推奨パッケージを使っているものが多くて大変でした。

ようやく動いたのがあるのでメモしておく。

以下のソースを参考にしてください。
参照元はここです。
適当なimportを行なって下さい。

private void initHttps(){
  try
  {
   mClient = new DefaultHttpClient();
   final SSLContext sslContext = SSLContext.getInstance("SSL");
   sslContext.init(null, new TrustManager[] { new X509TrustManager() {
    public void checkClientTrusted(X509Certificate[] arg0,
      String arg1) throws CertificateException {
    }
    public void checkServerTrusted(X509Certificate[] arg0,
      String arg1) throws CertificateException {
    }
    public X509Certificate[] getAcceptedIssuers() {
     return new X509Certificate[0];
    }
   } }, null);
   final SSLSocketFactory factory = new SSLSocketFactory(sslContext,
     new AllowAllHostnameVerifier());
   final Scheme https = new Scheme("https", 443, factory);
   final SchemeRegistry schemeRegistry = mClient
     .getConnectionManager().getSchemeRegistry();
   schemeRegistry.register(https);
  }
  catch (Exception e)
  {
  }
 }

2012年6月15日金曜日

Java1.7とJava1.5を共存させる

理由があってJDKの異なるバージョンを共存させなければいけなくなって、
調べて解決したのでメモ。

■求める用件は以下の通り
 ・EclipseはJava1.7で動かしたい
 ・別のソフトはJava1.5で動かしたい(正確には動かさないといけなかった)

■解決方法
1、システム環境変数にJAVA_HOMEをJava1.5で設定し、PATHに追加
2、Eclipse.iniの設定ファイルに-vm項目を追加してJava1.7を設定

-vm
C:\...\...\...\Java\...\javaw.exe

これでEclipseはJava1.7で起動し、ほかのJavaソフトはJava1.5で起動する

■もうひとつのマニュアル操作的方法
1、同じくシステム環境変数にJAVA_HOMEをJava1.5を設定し、PATHに追加
2、ユーザ環境変数にJAVA_HOMEをJava1.7で設定する

これでOK。
Java1.5を使いたい場合は、上記の設定で。
Java1.7を使いたい場合は、システム環境変数のJAVA_HOMEをJAVA_HOME2とかにしちゃう
そうするとPATHの中のJAVA_HOMEはユーザ環境変数のJAVA_HOMEになるから
Java1.7が使えるという方法

取り急ぎメモ。

2012年6月12日火曜日

AndroidのToggleButtonをiPhoneのスイッチ風に本気でカスタマイズする(XML編)

カスタマイズした結果は以前示した通りです。
かなりiPhoneに近くなりました。

実際に用いたXMLを以下に示す。
ON・OFFの画像は私の作品ではないので著作権の問題を考慮し、
公開しません。ご自分で用意してください。

なにかツッコミ、質問がありましたらよろしくお願いします。

--------------以下XML----------------
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false"><layer-list>
            <item><shape>
                    <size android:height="27dp" android:width="80dp" />
                    <corners android:radius="25dp" />
                    <solid android:color="#dcdcdc" />
                    <stroke android:width="1dip" android:color="#808080" />
                </shape></item>
            <item android:bottom="1.5dp" android:left="5dp" android:right="8dp" android:top="13dp"><shape>
                    <corners android:radius="15dp" />
                    <gradient android:angle="270" android:centerColor="#ededed" android:centerX="0.5" android:centerY="0.5" android:endColor="#ededed" android:gradientRadius="10" android:startColor="#ededed" android:type="linear" />
                </shape></item>
            <item android:right="52dp"><shape>
                    <size android:height="27dp" android:width="28dp" />
                    <corners android:radius="25dp" />
                    <solid android:color="#ffffff" />
                    <gradient android:angle="270" android:centerColor="#dcdcdf" android:centerX="0.5" android:centerY="0.3" android:endColor="#ffffff" android:gradientRadius="10" android:startColor="#dcdcdc" android:type="linear" />
                    <stroke android:width="1dip" android:color="#808080" />
                </shape></item>
            <item android:left="27dp"><bitmap android:gravity="center" android:src="@drawable/off" />
            </item>
        </layer-list></item>
    <item android:state_checked="true"><layer-list>
            <item><shape>
                    <size android:height="27dp" android:width="80dp" />
                    <corners android:radius="25dp" />
                    <solid android:color="#0099ff" />
                    <stroke android:width="1dip" android:color="#808080" />
                </shape></item>
            <item android:bottom="1.5dp" android:left="8dp" android:right="5dp" android:top="13dp"><shape>
                    <corners android:radius="15dp" />
                    <gradient android:angle="270" android:centerColor="#33aaff" android:centerX="0.5" android:centerY="0.5" android:endColor="#33aaff" android:gradientRadius="10" android:startColor="#33aaff" android:type="linear" />
                </shape></item>
            <item android:left="52dp"><shape>
                    <size android:height="27dp" android:width="28dp" />
                    <solid android:color="#ffffff" />
                    <gradient android:angle="270" android:centerColor="#dcdcdf" android:centerX="0.5" android:centerY="0.3" android:endColor="#ffffff" android:gradientRadius="10" android:startColor="#dcdcdc" android:type="linear" />
                    <corners android:radius="25dp" />
                    <stroke android:width="1dip" android:color="#808080" />
                </shape></item>
            <item android:right="27dp"><bitmap android:gravity="center" android:src="@drawable/on" />
            </item>
        </layer-list></item>
</selector>

2012年6月8日金曜日

AndroidのToggleButtonをiPhone風に本気でカスタマイズする(XMLは次回)

iPhoneのUIは素晴らしいと思います。
Androidでそれを実現するのは結構たいへんです。

せめてスイッチだけでも。。。
かなり頑張ってiPhone風にカスタマイズしました。

とりあえず完成品だけ。
XMLソースは整理したらアップします。

用いているのはXMLとON, OFF画像だけです。

こんな感じです。
iPhone風スイッチボタン

2012年5月27日日曜日

AndroidでSDKをアップデートしたらエラーが出た場合

メモ:ADTを最新版にすると直る

Xcode3でMac OS X Lionにnode.jsをインストールすると失敗する

OS: Lion 10.7.4
Xcode: 3 -> 4

purpose: Install node.js using ports

App StoreからXcodeをインストールすると/Applicationsフォルダにインストールされる。
その前にまずXcode3をアンインストールする必要がある。
以下のサイトが参考になる。

Xcode4に更新してからでnode.jsをport経由でインストールしたくてもエラーする

警告の内容の一部
----------------------
Warning: xcodebuild exists but failed to execute
Warning: Xcode does not appear to be installed; most ports will likely fail to build.
Warning: The Command Line Tools for Xcode don't appear to be installed; most ports will likely fail to build.
Warning: See http://guide.macports.org/chunked/installing.xcode.html for more information.

----------------------

以下のサイトを参考にツールをインストールすれば無事にnode.jsをインストールできる。


$sudo port install nodejs
$node -v
v0.6.18

安定版がインストールされました。
エンジョイ!

2012年4月16日月曜日

AndroidでiPhone風のスイッチを作る

普通のAndroidのToggleButtonを使ってもつまらないですね!

デザインならiPhoneが今のところ一番だと考えます。

なるべく近づけてみましょう。

論より証拠ということで以下のコードを参考にしてみてください。
←普通のToggleButton

←これがカスタマイズした後のToggleButton

手順は以下の通りです。
1、以下のコードをres/drawable/customtoggle.xmlとでもして保存して下さい。
2、backgroundプロパティに指定して下さい。
3、on textとoff textにそれぞれ半角スペースを指定して下さい。


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_checked="false">
        <layer-list>
            <item>
                <shape>
                    <size android:height="27dp" android:width="60dp" />

                    <gradient android:angle="270" android:centerColor="#c0c0c0" android:centerX="0.5" android:centerY="0.5" android:endColor="#c0c0c0" android:gradientRadius="10" android:startColor="#c0c0c0" android:type="linear" />

                    <corners android:radius="8dp" />

                    <solid android:color="#c0c0c0" />

                    <stroke android:width="1dip" android:color="#808080" />
                </shape>
            </item>
            <item android:left="30dp">
                <shape>
                    <size android:height="27dp" android:width="30dp" />
                    <corners android:radius="8dp" />
<gradient android:angle="270" android:centerColor="#B0C4DE" android:centerX="0.5" android:centerY="0.5" android:endColor="#778899" android:gradientRadius="10" android:startColor="#ADD8E6" android:type="linear" />


                    <stroke android:width="1dip" android:color="#808080" />
                </shape>
            </item>
            <item android:left="-30dp">
                <bitmap android:src="@drawable/off" android:gravity="center" />
            </item>
        </layer-list>
    </item>
    <item android:state_checked="true">
        <layer-list>
            <item>
                <shape>
                    <size android:height="27dp" android:width="60dp" />

                    <corners android:radius="8dp" />

                    <solid android:color="#ffffff" />

                    <stroke android:width="1dip" android:color="#808080" />
                </shape>
            </item>
            <item android:right="30dp">
                <shape>
                    <size android:height="27dp" android:width="30dp" />
<gradient android:angle="270" android:centerColor="#B0C4DE" android:centerX="0.5" android:centerY="0.5" android:endColor="#778899" android:gradientRadius="10" android:startColor="#ADD8E6" android:type="linear" />
                    <corners android:radius="8dp" />

                    <stroke android:width="1dip" android:color="#808080" />
                </shape>
            </item>
            <item android:right="-29dp">
                <bitmap android:src="@drawable/on" android:gravity="center" />
            </item>
        </layer-list>
    </item>

</selector>

2012年4月14日土曜日

Androidでアラームを作るための手順の例

ネットで「Android アラーム 開発」などとググるといろんな方が記事を書いています。

しかし、断片的なイメージが強かったのでまとめてみたいと思います。

■今回作成するアプリの概要
AlarmManagerを用いて、指定した時間後にアラーム通知画面が表示され、アラーム音を鳴らす

■手順
SampleActivity(アラーム設定画面とします)

(任意)MyAlarmManager(設定されたアラームを管理する独自クラス)

MyAlarmService(サービスを起動してブロードキャストメッセージを送ります)

MyAlarmNotificationReceiver(メッセージを受信して通知画面を起動します)

AlarmNotificationActivity(通知画面です)

■条件
1、スリープ画面であってもアラーム画面を表示する

■実装
まず、マニフェストファイルで設定しないといけない項目があります。
以下のXMLをAndroidManifest.xmlのapplicationタグ内の適切なところに配置します。
intent-filterで独自のメッセージ「"MyAlarmAction"」を受信するようにしてます。
------------------------------------------------------------------------------------------------
 <receiver android:name="MyAlarmNotificationReceiver">
            <intent-filter>
                <action android:name="MyAlarmAction"/>
            </intent-filter>
</receiver>
<service android:name="MyAlarmService"></service>
<activity android:name="AlarmNotificationActivity"></activity>
------------------------------------------------------------------------------------------------

以下の2行をmanifesstタグ直下に配置します。
これは、スリープ状態を解除するために必要な権限です。
------------------------------------------------------------------------------------------------ 
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
------------------------------------------------------------------------------------------------

【SampleActivity.java】
アラームをセットするために必要なのは以下の2行だけです。
実行する場所はどこでもいいと思います。ボタンを押したタイミングなど...

今回はテストのため簡略化しています。
便宜上引数を設けた方がいいと思います。
MyAlarmManager mam = new MyAlarmManager(this);
mam.addAlarm();

【MyAlarmManager.java】
import java.util.Calendar;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyAlarmManager {
    Context c;
    AlarmManager am;
    private PendingIntent mAlarmSender;
   
    public MyAlarmManager(Context c){
    this.c = c;
    am = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
    Log.v("MyAlarmManger","初期化完了");
    }
   
    public void addAlarm(/*今はなにもなしで*/){
    mAlarmSender = PendingIntent.getService(c, -1, new Intent(c, MyAlarmService.class), PendingIntent.FLAG_UPDATE_CURRENT);
    // アラーム時間設定
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(System.currentTimeMillis());
    cal.add(Calendar.MINUTE, 1);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    Log.v("MyAlarmManagerログ",cal.getTimeInMillis()+"ms");
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), mAlarmSender);
    Log.v("MyAlarmManagerログ","アラームセット完了");
    }
}

【MyAlarmService.java】
Serviceを継承してます。

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class MyAlarmService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
    Log.v("MyAlarmServiceログ","Create");
    Thread thr = new Thread(null, mTask, "MyAlarmServiceThread");
    thr.start();
    Log.v("MyAlarmServiceログ","スレッド開始");
    }

    /**
     * アラームサービス
     */
    Runnable mTask = new Runnable() {
    public void run() {
        // ここでアラーム通知する前の処理など...

        Intent alarmBroadcast = new Intent();
        alarmBroadcast.setAction("MyAlarmAction");//独自のメッセージを送信します
        sendBroadcast(alarmBroadcast);
        Log.v("MyAlarmServiceログ","通知画面起動メッセージを送った");
        MyAlarmService.this.stopSelf();//サービスを止める
        Log.v("MyAlarmServiceログ","サービス停止");
    }
    };
}

【MyAlarmNotificationReceiver.java】
これは、サービスから送られて来たメッセージを受信する役割を担います。
今回はただ通知画面を起動するだけです。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyAlarmNotificationReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
    Log.v("レシーバログ", "action: " + intent.getAction());
    Intent notification = new Intent(context,
        AlarmNotification.class);
    //ここがないと画面を起動できません
    notification.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(notification);
    }

}

【AlarmNotificationActivity.java】
これが実際に表示されるアラーム通知画面です。
onStartでアラーム音を再生しています。
onDestroyでリソースを解放します。

import android.app.Activity;
import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.Log;

public class AlarmNotification extends Activity {
    private WakeLock wakelock;
    private KeyguardLock keylock;

    MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alarm);
    Log.v("通知ログ", "create");
    // スリープ状態から復帰する
    wakelock = ((PowerManager) getSystemService(Context.POWER_SERVICE))
        .newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK
            | PowerManager.ACQUIRE_CAUSES_WAKEUP
            | PowerManager.ON_AFTER_RELEASE, "disableLock");
    wakelock.acquire();

    // スクリーンロックを解除する
    KeyguardManager keyguard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    keylock = keyguard.newKeyguardLock("disableLock");
    keylock.disableKeyguard();
    }

    @Override
    public void onStart() {
    super.onStart();
    if (mp == null)
        mp = MediaPlayer.create(this, R.raw.alarm);
    mp.start();
    }

    @Override
    public void onDestroy() {
    super.onDestroy();
    stopAndRelaese();
    }

    private void stopAndRelaese() {
    if (mp != null) {
        mp.stop();
        mp.release();
    }
    }
}


大まかにこんな感じでアラームが起動します。
必要に応じてコードは書き換えて下さい。
リソースファイルなどを用意していないと動きません。
コピペで動く保障はしません。

他にも手段はあります。
あくまでも一例としてみて頂ければと思います。

アドバイス、指摘などありましたらコメントをお願いいたします。

2012年3月29日木曜日

『 Android™アプリケーション技術者試験』合格!

受験期限ギリギリのチケットを活用して受験してきました。

会場は自宅から一番近いところで、
開始予定時刻15分前に行き、受付を済ます。

試験の説明があって、開始する。

出てくる問題が意外にも簡単でした。
ちょっと開発経験があり、問題集をやったことがある人なら合格できそうでした。

ライセンスの問題や、プログラムソース、実行結果、イベントなどなど

問題集に似た問題も何問か出ました

メモ用のシート1枚と油性ペンを渡される。
これは使っていいそうだ。
シートが足りなければ追加してもらえる。

ちなみに、Androidのバージョンとバージョン番号の関連づけをど忘れしてしまい、
一問微妙でした。

しかし、後に出て来た問題にそれが載っててラッキーでしたww
出題ミスなのか、意図的なのかはわからない。

【出題問題数】
70問

【結果】
74%で合格
(51問以上正答)

2012年3月20日火曜日

AndroidでGoogleMapにItemizedOverlayを付加する場合

サンプルソースではNullPointerが発生する。

解決方法は以下のページに書いてあるので割愛致します。
http://misapon.blogspot.jp/2010/10/itemizedoverlaymapviewnullpointerexcept.html

コンストラクタでpopulate()メソッドを呼び出すのがキモのようです。

2012年3月14日水曜日

Androidタブレット向けアプリ開発でNetworkOnMainThreadException

タイトルで分かるように、タブレット向けアプリではメインスレッド(UIスレッド)でネットワークアクセスができない。

しようとすると、例外が発生してしまう。

解決するには、別スレッドでネットワークにアクセスする必要がある!!

初めてタブレットアプリを作る人にはビックリですね。
今までの端末では動作していたのに!?ってなりますから

以下のブログでも紹介されています。

Android タブレット アプリ開発でNetworkOnMainThreadException発生

2012年3月1日木曜日

mediba adの不信なメールは不信じゃなかった

アプリに広告を導入しています。
mediba adというところを利用させて頂いてます。

本日突然、パスワード再設定のメールが来ました。
もちろん、再設定の申請はした覚えがまったくありません。

問い合わせにそういった旨をメールしました。

そしたら、サービス統合によるパスワード再設定です、というメールが利用者に送信されました。

安心しました。
アカウントが持ってかれたかとびくびくしましたよ...

2012年2月27日月曜日

MacBook Pro 13inch 2009Midのメモリを増設

購入時は4Gメモリで意気揚々としていましたが、
平行して多くのアプリケーションを使うようになった昨今、
メモリが逼迫状態でした。
残り数M状態が頻繁になり、速度低下で作業が進まないことも。。。

そこでメモリの増設を決心!
Macのメモリ増設は人生初だったので、結構入念に下調べした。
その結果、わりと簡単であることが発覚w

まずは、ネットでMacノート用のメモリ8G(4Gx2)を購入。
お値段は3k程度、送料込みで3.5kでした。
まずはその安さに驚き!!

メモリが届きいよいよ取り付け!!
緊張しながらも裏蓋のねじを一個ずつ外していく。
外したねじはフタにテープで固定した。
どのねじがどこだったかを忘れないように。

そうすると一発でメモリの場所がわかる。
あとは、公式サイトの説明通りにメモリを2枚外す。
そして、新しいメモリを挿し込み、完了!

フタを閉めておしまい。
簡単過ぎてあっけないw

ここまで上半身裸になって作業しましたwww

次はHDDをSSDタイプにしてみたくなった!

そしたら少しは重量が軽くなるかな〜

東京スマートフォンAPPアワード

少し前からハマりだしているAndroidアプリ制作の一環でコンテストに出展してみた。
タイトルの通り、東京スマートフォンAPPアワードなるものである。

結果はどうあれちょっとした達成感を味わえた!

自分一人ではできないことはたくさんあり、
それをやってくれた仲間に感謝である!

これからもAndroidアプリ開発をしていきたいと思う!!

SoundPoolを使った効果音の扱い方や、
UIスレッド以外のスレッドによる処理とUIスレッドへの描画命令など

勉強できることはたくさんありました!

2012年1月19日木曜日

[Android]IntentでObjectをputExtraで渡す

既に題名に関する情報はいろんな方が公開しています。
自分のためにメモ。

Activityを新しく起動した際に、Intentを介してデータを渡したい、
こういったことがよくあると思います。

ふと、Object型を渡したいって思った時にやったことが無かったので
調べてみました。

最初にこのページを見つけて以下のヒントを得ました。
Serializableインタフェースを実装することによって画面遷移でオブジェクトを渡すことが出来る

ここで疑問に思ったのがなぜSerializableである必要があるのか?

まず、Serializableについて調べてみました。
http://d.hatena.ne.jp/daisuke-m/20100414/1271228333
http://www.ne.jp/asahi/hishidama/home/tech/java/serial.html

これらのページから分かることは、Serializableはオブジェクトを直列化、
つまりStreamにながせる状態にし、かつ、デシリアライズ可能であること。

文章がへたくそですみません。

消しゴム→ねりけし(シリアライズ)→(ストリート)→消しゴム(デシリアライズ)

的なイメージ?w
さらに分かりにくくなってすみませんorz

なぜ、Serializableでなければいけないのか、
内部的にどうやってデータを渡しているのか、
Androidのソースをダウンロードして解析してみたいと思います。

モチベーションが続いてたら、続く。

【追記】
Androidソースをダウンロードして探して見た!
詳細は不明だけど、IntentにputExtrasでセットしたデータは
ファイルに落とし込まれることは分かった。

ぜひ、どなたか詳しい方教えて欲しいですorz

「ファイルに落とし込むためにSerializableでなければならない」
という結論に至った。

詳しいことは依然として不明です...orz

2012年1月6日金曜日

AFreeChartを使ってAndroidアプリを作った

afreechartを使って実際にAndroidアプリで家計簿を作ってみた。

アプリ名:マネマネ
https://market.android.com/details?id=jp.tsuyoshi.mm


SlidingDrawを使ってグラフを表示させています。
興味がある人は参考にしてみてください。