2011年2月15日火曜日

androidのファイル入出力、Intentについて

ファイル出力
context.openFileOutput(sFileName,Context.MODE_PRIVATE);
第一引数はファイル名で第二引数はアクセスの種類 自身のアクセスのみか外部からのアクセスを許可するかなどを設定できる

ファイル入力
context.openFileInput(sFileName);
第一引数はファイル名
アンドロイドはアプリごとに固有のフォルダを作成しているのでそのフォルダのファイルを扱う場合はフルパスの必要がない。SDカードの場合などはフルパスの必要有り

このファイル入出力をひとつのクラスで管理しようとしてはまってしまった
openFileOutputはcontextのパブリックメソッドかーとリファレンス読んで理解
じゃあcontext継承して入出力管理すりゃいいかと何故か考えてしまった・・・
継承したクラスからopenFileInputとか読んでもnullPointerの例外が
この継承したクラスはアプリ情報持ってないですし無理なの当たり前と気付くのに2時間
なにやってんだろ・・・

つまり入出力管理するにはアプリ情報が必要なのでを他クラスで入出力管理する場合はContextを渡してからファイル処理する必要があるということです。
それでクラスのコンストラクタにContextを渡して処理することにより解決
この渡してもらったContextからopenFileInputなどすればOK

もうひとつIntentのPutExtraについて
intentで値を渡す場合はputExtra("name",value)という感じにする
様々な型のオーバーロードが用意されている

毎回値を変えていく設計をしたときにはまった
putExtra("name",value)のvalueが呼ばれるたびに値が変わっていく仕様でコーディングしていたときに
値が初回のputExtraから更新されないということに。


PendingIntent contentIntent01 = PendingIntent.getActivity(this0, intent01, 0);  
intentからpendingIntentを作成する際のgetActivitiyに問題があった。
第四引数が情報の更新をするかどうかのフラグなんだがよく調べずに0入れていた
ここをPendingIntent.FLAG_UPDATE_CURRENTに変えると更新されるように。

こっちはぐぐったら同じようなことにはまっている人がいてた
その人も書いてたけどよく調べてから実装しようと。
心がけます・・・