AndroidでPost送信を行うには…安全&簡単なやり方【Java】

数年前までアプリ開発してたんですが、とある事情でやめてました。

でも作りたいアプリがあったので、最近になって再開してます。

ただ辞めている間にAndroid Studio が出るは、いつのまにか Android がお菓子のコード名をやめたとか、次はAndroid10になるだとか・・・いろいろ状況が変わりすぎて浦島太郎状態

そこで新規一転、Android開発で学んだことをメモしてきます。
(このブログらしくWeb開発と関係のあること中心)

 

今回は Android でPOST送信してレスポンスを受け取る方法 について

非同期処理はメインスレッドに書いてはいけないので、
AsyncTask を使って非同期通信しないとダメになったみたいです。

Android6.0以降だと AsycnTask が必須みたい

AsyncTaskは文字通り非同期なタスクを実行するためのもの

POST送信とか通信系の処理は、Android6.0以降だと必ずこれを使わないとダメみたいです

昔はUIスレッド上でも行けた気がするけど、大分状況が変わってますね。

▼ ちなみに AsyncTask  の公式リファレンスでの説明

AsyncTask enables proper and easy use of the UI thread. This class allows you to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.

引用元 : https://developer.android.com/reference/android/os/AsyncTask

▼ 上の説明の超意訳

AsyncTaskを使うと、UIスレッドを安全&簡単に使用できる。つまり、面倒なスレッドやハンドラーの操作しないでUIスレッドに結果を反映できるし、バックグラウンド操作も実行できるってこと。

この AsyncTask  を使うことで、安全にPOST送信できます。

自分がよく試すのは、次で紹介する手順 です。

手順1.まずPOST送信用のデータクラスを作成

まずPOST送信しやすくするための準備から

それがPOST送信のURL・データを一括管理できるクラスの作成

別になくてもいいけど、コードを再利用しやすくなります。

 

ここでは SendPostTaskParams  という名前で作成してみました。

▼ 実際に作ってみたクラスコード例がコチラ

POST送信するデータは postData  で連想配列として宣言。
あとPOST通信してレスポンスを返してもらうURLを url  で定義。

その他に必要なパラメーターがあるなら、色々追加してもOK

それにしても、こうやって Java でコード書くのも久しぶりです。
大分忘れてることもあって、クラス作るだけでもしんどかった・・・笑

まあとりあえず、こういうクラスを定義しておきます。

手順2.POST送信するAsyncTaskクラスを作成する

次に肝心のAsyncTaskクラスの作成

ここでは SendPostAsyncTask  というクラス名で作ってみます。

 

▼ そのコード例は次の通り

長い・・・・・・・・・・
POST送信でこれだけ長くなるなんて アプリ開発 って大変です。

それで大事なポイントだけ箇条書きすると、こんな感じ

  • 必ず doInBackgroud  をオーバーライド
    このメソッドは AsyncTask  が実行されたときに、 onPostExecute  メソッドでレスポンスを受け取るのに必要になる。
  • POSTデータはバイト配列に変換する
    この例だと自作データクラス SendPostTaskParams  からPOSTデータのマップを取り出し、文字列化している。そのあと postData.toString().getBytes("UTF-8");  によってバイト配列に変換。

あとは説明するのが面倒なので、コメントとか見てください。

大体なにをしてるかは分かるはずです。

手順3.ActivityからPOST送信してJSONを受け取ってみる

あとは Activity 内の onStart とか onResume でPOST送信するだけ

レスポンスは AsyncTask  の onPostExecute  をオーバーライドすれば受け取れます。

 

ただ言葉だと分かりにくいので、
実際に適当なプロジェクトを作って、実際にPOST送信してみました。

▼ そのコードがコチラ

まず AsyncTask  をインスタンス化し、 execute  メソッドを実行。

ここで自作データクラス SendPostTaskParams  を使い、URLとPOSTデータをいろいろ渡してます。(こういう風に、データクラスを定義すると後で楽になる)

そして onPostExecute  をオーバーライドすれば、レスポンスが受け取るという感じ

AndroidでPOST送信のやり方まとめ

ちょっと長くなったので、箇条書きしてまとめます。

  1. POST送信用のデータクラスを作成
  2. POST送信するAsyncTaskクラス作成
  3. ActivityなどからPOST送信

箇条書きだとシンプルだけど、実際にコードを書いてみると大変

改めて「 Java って複雑で冗長だな~」ってことを思い出しました。

でもPOST送信できるようになったので一件落着です。ではまた($・・)/~~~

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください