[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 デベロッパー

シェアする

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

フォローする