[Android] HTTP POST のデータ送信をVolleyで実装する

サーバーにデーターを送信するためには、HTTP のPOSTを使って送信できます。
非同期に以前はAsyncTaskなどを使っていましたが、Volleyを使うと簡単に実装できます。
 

Android Studio
2021.2.1

 




HTTP

 
WebサーバとWebクライアント間でデータ送受信を行うために用いられるプロトコル(規約)をHTTPと言います。データの送受信にはGETとPOSTのメソッドがあり用途により使い分けます。
 

 

POST & GET

 
基本的には、両方とも送受信が可能です。
例えばGETでは画像データが欲しいというリクエストを送信して、その画像データを受け取る。POSTではデータベースの情報をサーバーに保存するために大量のデータを送るなど。以下は両者のザックリとした相違点

  • GET
    • サーバから情報を取得するケースに使うことが多い
    • データを送信できるのはテキストのみで少量しか送れない
    • URLに付加して送信するので簡単
  • POST
    • サーバへ情報を登録するケース
    • バイナリーデータの送信
    • GETでのデータ送信限度を超えてしまう場合
    • 送信データをBODY部分に含めて送信できるので制限はない

今回はこのPOSTのメソッドを使って、サーバーへデータ送信するケースを考えてみます

  • Android 6からApacheのHTTP Clientが基本的に使えなくなりました。
    Apache HTTP Client Removal
  • Android 11から非同期のAsyncTaskが非推奨となりました
 

Volley

 
何も考えずにネットにアクセスしてデーターをダウンロードすると例外がでます。
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1114)
非同期でアクセスしないといけません。
 
これは android 3.0より前のバージョンではなかったのですがAndroid 3.0 以降で、メインスレッドでネットワーク処理を行うとエラーとなるように変わったようです。
 
非同期は以前はAsyncTaskを使っていましたが、Android 11から非推奨となりました。
代案としてはExecutorsやHandlerを使用する等がありますが、Volleyを使うとシンプルです。

Volleyは非同期機能が提供され、ネットワーク操作を容易化、高速化する HTTP ライブラリで次のような利点があります。

  • ネットワーク リクエストの自動スケジューリング。
  • 複数のネットワークの並行接続。
  • 標準の HTTP キャッシュ コヒーレンシを備えた透過的ディスク / メモリ レスポンス キャッシュ。
  • リクエストの優先順位付けのサポート。
  • Cancellation request API。単一のリクエストのキャンセル、ブロックの設定、キャンセル リクエストの範囲の設定ができます。
  • 容易なカスタマイズ(再試行、バックオフなど)。
  • 強力な順序付けにより、ネットワークから非同期に取得されるデータを UI に正しく簡単に入力できます。
  • デバッグツールとトレースツール。

Ref:  Volleyの概要

 

phpで受け取る

 
例として、AndroidからHTTP POSTで送信しサーバー側のphpで受け取ります。

サーバー側で受け取った文字列を含んだhtmlを生成しブラウザで表示させてみたいと思います。

1x1.trans - [Android] HTTP POST のデータ送信をVolleyで実装する


 
phpファイルで’word’というキーワードで受け取った文字列をそれを含めたhtmlファイルを生成させる以下のようなシンプルなコードを作りサーバーに置きます。

pass_check.php

 
Android側では build.gradle ファイルに以下の依存関係を追加します。
(バージョンは適宜あわせます)
build.gradle(Module)

AndroidManifest.xml にインターネットのパーミッションを追加

MainActivity.java

 
これでテストすると
Word = test
と結果がブラウザに表示されました。

 

サンプルコード

 
EditTextで入力した文字列をPOST送信し、BROWSERボタンでChromeなどに飛ばして生成されたhtmlを開いてパスワード文字列を確認する流れで作って見ます。

また、上記のコードはlambdaで簡略化できます

MainActivity.java

 
 
レイアウトファイル
activity_main.xml

 
リソース
strings.xml

 
マニフェストに INTERNET のパーミッションを入れるのを忘れずに
AndroidManifest.xml

 

 

サンプル動画

 
サーバーにphpファイルを置いて試してみました。
レンタルサーバーを契約していれば、https://hoge-hoge.com/… 以下を変更してFTPなどでphpファイルを上げてテストできるでしょう。
 

 
 
関連ページ:

Reference:
Volley の概要 | Android デベロッパー
シンプルなリクエストを送信する | Android デベロッパー
RequestQueue をセットアップする | Android デベロッパー







アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。

TECH ACADEMY
オンライン説明会



Code Camp
現役エンジニアによるオンラインプログラミングスクール【CodeCamp】


直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。



侍エンジニア塾
侍エンジニア塾 無料体験レッスン


とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする