【android】RESTコールするぞ!

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を変更する

accelebiz.hatenablog.com

マニュフェストにインターネット接続許可を追記することも忘れずに。

<uses-permission android:name="android.permission.INTERNET" />

github.com


エクセプションは次のようにストリング型にすれば、UIに表示できます。

catch(Exception ex) {
  System.out.println(ex);
  mText.setText(ex.getMessage());
}

【android】mac mini にandroid studioをインストールしよう!

https://qiita.com/ryskiwt/items/f65f0dd1e260a5eaa855

https://qiita.com/ryskiwt/items/f65f0dd1e260a5eaa855

https://qiita.com/stilo/items/8596e73b8af3470d5912

https://eng-entrance.com/linux-vi-base

https://tech.moverio.epson.com/ja/bt-350/developers_guide/display_control.html

【html】自在にドラッグできるhtml

こちらを参考に作ってみた!
q-az.net

<!DOCTYPE html>
<html>
<head>
	<title>BRMS</title>
	<meta charset="utf-8"/>
	<style>
		.drag-and-drop {
			cursor: move;
			position: absolute;
			z-index: 1000;
			width: 200px;
			height: 40px;
			text-align:center;
			background-color:#49a9d4;
			border-radius:5px;
			display:block;
		}
		.drag-and-drop.item1{
			top : 100px;
			position : absolute;
		}
		.drag-and-drop.item2{
			top : 150px;
			position : absolute;
		}
		.drag-and-drop.item3{
			top : 200px;
			position : absolute;
		}
		.drag {
			z-index: 1001;
		}
	</style>
</head>
<body>
	<div class="drag-and-drop item1"  id="red-box">item1</div>
	<div class="drag-and-drop item2"  id="blue-box">item2</div>
	<div class="drag-and-drop item3"  id="yellow-box">item3</div>
	<script type="text/javascript">
	(function(){
	//要素の取得
	var elements = document.getElementsByClassName("drag-and-drop");

	//要素内のクリックされた位置を取得するグローバル(のような)変数
	var x;
	var y;

	//マウスが要素内で押されたとき、又はタッチされたとき発火
	for(var i = 0; i < elements.length; i++) {
		elements[i].addEventListener("mousedown", mdown, false);
		elements[i].addEventListener("touchstart", mdown, false);
	}

	//マウスが押された際の関数
	function mdown(e) {
		//クラス名に .drag を追加
		this.classList.add("drag");

		//タッチデイベントとマウスのイベントの差異を吸収
		if(e.type === "mousedown") {
			var event = e;
		} else {
			var event = e.changedTouches[0];
		}

		//要素内の相対座標を取得
		x = event.pageX - this.offsetLeft;
		y = event.pageY - this.offsetTop;

		//ムーブイベントにコールバック
		document.body.addEventListener("mousemove", mmove, false);
		document.body.addEventListener("touchmove", mmove, false);
	}

	//マウスカーソルが動いたときに発火
	function mmove(e) {

		//ドラッグしている要素を取得
		var drag = document.getElementsByClassName("drag")[0];

		//同様にマウスとタッチの差異を吸収
		if(e.type === "mousemove") {
			var event = e;
 		} else {
			var event = e.changedTouches[0];
		}

		//フリックしたときに画面を動かさないようにデフォルト動作を抑制
		e.preventDefault();

		//マウスが動いた場所に要素を動かす
		drag.style.top = event.pageY - y + "px";
		drag.style.left = event.pageX - x + "px";

		//マウスボタンが離されたとき、またはカーソルが外れたとき発火
		drag.addEventListener("mouseup", mup, false);
		document.body.addEventListener("mouseleave", mup, false);
		drag.addEventListener("touchend", mup, false);
		document.body.addEventListener("touchleave", mup, false);

	}

	//マウスボタンが上がったら発火
	function mup(e) {
		var drag = document.getElementsByClassName("drag")[0];

		//ムーブベントハンドラの消去
		document.body.removeEventListener("mousemove", mmove, false);
		drag.removeEventListener("mouseup", mup, false);
		document.body.removeEventListener("touchmove", mmove, false);
		drag.removeEventListener("touchend", mup, false);

		//クラス名 .drag も消す
		drag.classList.remove("drag");
	}

	})()
	</script>
</body>
</html>