【android】Volleyでpostパラメータを送信してjsonを受取る方法メモ
はじめに
今回やりたかったのは、以下のようなよくある処理ですが少しはまったのでメモしておきます
・アプリからpost送信
・サーバーにて$_POST(phpです)を受信してjsonを返す
・アプリでjsonを処理する
インストールと設定とか
まずはインストールして使えるようにする
git init # gitで管理していなければ git submodule add https://android.googlesource.com/platform/frameworks/volley modules/volley
AndroidManifest.xmlにパーミション追加
<!-- インターネット使用 --> <uses-permission android:name="android.permission.INTERNET" />
実装
サーバ側(php)
// $_POSTで受取る header("Content-Type: application/json; charset=utf-8"); echo json_encode(array( "status" => 1, // 処理結果(今回は1なら正常という意味とする) "result" => array( // アプリ側に返却したいがあればresult以下にセットすることとする "userList" => array( array("id" => "1", "name"=>"ユーザー1"), array("id" => "2", "name"=>"ユーザー2"), ・・・ ), ), ));
protected void onCreate(Bundle savedInstanceState) { ・・・ // apiのurl String url = "http://example.com/json.php"; RequestQueue queue = Volley.newRequestQueue(this); StringRequest request = new StringRequest(Request.Method.POST,url, new Response.Listener<String>() { @Override public void onResponse(String response) { try { // レスポンス文字列をjsonオブジェクトに変換して解析してゆく JSONObject jsonObject = new JSONObject(response); if (jsonObject.getInt("status") == 1) { JSONObject result = jsonObject.getJSONObject("result"); JSONArray userList = result.getJSONArray("userList"); } } catch (JSONException e) { // error } } }, new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError error){ //error } }){ @Override protected Map<String,String> getParams(){ // パラメータ設定 Map<String,String> params = new HashMap<String,String>(); params.put("param1","パラメータ1"); params.put("param2","パラメータ2"); ・・・ return params; } }; // 送信 queue.add(request); }
やりたいことはこれでできました
今回はまったポイントとしては、JsonObjectRequestを使っていたのですがこれを使うとレスポンスがJSONObjectで返ってくるので処理が簡単だったのですが、サーバー側へ送信するパラメータもjson形式になってしまうようでStringRequestを使う形にしました。
$input = file_get_contents("php://input");
JsonObjectRequestで送ったパラメータはphp側でも上記のように取得できるのですが、今回は$_POSTで取得したかったのでこちらを使うことにしました
やりかたあるのかもしれませんが、、、以上です