【成功】バイナリデータをWebServiceから渡す・Androidで受け取る
前の日の予想は正解でした(www
方式を変更してなんとか成功。
【Android】
http Get形式でリクエストでファイル名を渡す
↓↓
取得したファイル名の画像ファイルをfilestreamで読み出し
↓
Image.FromStreamで一旦Imageに。
↓
ImageConverterのConvertToでバイト配列へ変換
↓↓
【Android】
レスポンスからバイナリデータ取得
↓
xmlへパース
↓
画像データの部分のみ抜き出してbase64でバイト配列に変換
↓
bitomapへ変換
↓
ImageViewへセット
AndroidでHTTP通信でバイナリデータを受け取る方法は
こちらを参考にさせていただきました。
C#のWebServiceからバイト配列を渡す場合、base64で渡ってきます。
なのでAndroid側でバイト配列に変換する際はbase64で変換する必要があります。(アフォなので普通にutf-8とかでやろうとしてました・・・)
今回はOSのバージョンが2.1で作成しているため、2.2以降対応してる標準のbase64は使えないそうです。
なのでこちらで紹介されていたBase64クラスを利用させていただきました。
これで画像データもWebサーバーのフォルダ直接ダウンロードでなく、WebServiceを通してデータが取得できるようになりました(w
ProgressDialog&asynctaskを使ってバックグラウンド処理してから新しい画面に移動する
これもなかなか上手くいきませんでした。
アラートダイアログをカスタマイズしたときも似た様な感じでエラーになってましたが・・・。
やりたかった処理。
ProgressDialog(ぐるぐる回るタイプ)を表示
↓
WebServiceを使ってデータ検索
↓
検索処理終了後、ProgressDialogを終了
↓
検索結果を表示する画面を表示(画面移動)
ProgressDialogを表示中、別スレッドで本処理(この場合検索処理)を行います。
最初はこちらを参考に実装してみました。
途中までは上手くいくのですが、handleMessage内でintentを使って別画面に移動しようとするとエラーになります(;><)
どうしても解決できないので今度はasynctaskを使ってbackGround処理をするクラスを作成。
こちらのサイトを参考にしました。
onPostExecuteでやはり画面移動しようとするとエラー・・・。
こりゃあ別スレッドに対して現在表示中のActivityを渡すとダメなのかな??
と思いcallBackを作成してasynctaskに引き渡してみました。
今度参考にさせていただいたサイトはこちら。
callBackで処理が戻ってきたときのthisは間違いなく表示中の画面のActivityのハズ。
そしてcallback内で画面移動するように実装したら、
おお、上手く画面移動ができました!!(゚∀゚)
しかし何故別スレッドに渡したActivityからだとうまく画面遷移ができないんでしょうねえ????
そこは解決できませんでした・・・(´・ω・`)