AndroidからAWS API GatewayにRESTコールするプログラムを作ります。(test03)
構成
Android -> AWS API Gateway -> AWS Lambda
API GatewayはGETメソッドで受けて、Lambdaが"Hello from Lambda!"というbodyを返します。
Lambadはpython3.7の初期プログラムから変更していません。
ソースコード
AWS Lambda : lambda_function.py : python3.7
import json def lambda_handler(event, context): print(json.dumps(event)) # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
Android : MainActivity.java : java
package com.example.test3; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import android.widget.Button; import android.widget.EditText; import android.view.View; import android.os.Handler; // REST Call import java.net.HttpURLConnection; import java.net.URL; import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.InputStream; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView mText; private Button mButton; private EditText mEdit; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //変数定義 setContentView(R.layout.activity_main); mText = (TextView) findViewById(R.id.text01); mButton = (Button) findViewById(R.id.button01); mEdit = (EditText) findViewById(R.id.editText01); HttpURLConnection httpConn = null; findViewById(R.id.button01).setOnClickListener(this); findViewById(R.id.text01).setOnClickListener(this); handler = new Handler(); } @Override public void onClick(View v) { if (v != null) { mText.setText("押されました!"); switch (v.getId()) { case R.id.button01: mText.setText("ボタンが押されました!"); HttpCall(); break; case R.id.text01: mText.setText("テキストが押されました!"); break; default: break; } } } public void HttpCall() { new Thread(new Runnable() { @Override public void run() { try { URL url = new URL("https://www.drk7.jp/weather/xml/27.xml"); HttpURLConnection con = (HttpURLConnection)url.openConnection(); final String str = InputStreamToString(con.getInputStream()); handler.post(new Runnable() { @Override public void run() { mText.setText(str); } }); } catch(Exception ex) { System.out.println(ex); mText.setText(ex.getMessage()); //mEdit.setText(ex.getMessage()); } } }).start(); } private String InputStreamToString(InputStream is) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); return sb.toString(); } }
参考
HTTP Request
qiita.com
メインスレッド以外でUIを変更する
マニュフェストにインターネット接続許可を追記することも忘れずに。
<uses-permission android:name="android.permission.INTERNET" />
エクセプションは次のようにストリング型にすれば、UIに表示できます。
catch(Exception ex) { System.out.println(ex); mText.setText(ex.getMessage()); }