SQLの窓

2016年05月30日


tools.jar の callHttpGet のテストと include による画面再利用と HttpPost クラスで掲示板書き込み / Android Studio

tools.jar

libs フォルダに保存して、右クリックから Add as Library を実行すると参照可能になります。

▼ ソースコード
Tools, Tools2, TestArrayAdapter, AndroidTools.java )

tools.jar は、気軽にアンドロイドのアプリケーションのテストができるように作成したライブラリです。Android の動作テストはとても時間がかかり、結構デリケートな部分が多いので、できればこのライブラリの中にあるような内容は適当にしたい事が多くあります。特に、商品では無く他人への説明や他の機能の習熟目的で使用し、自分自身は学生をターゲットにしており、授業で使用しています。

それらの中でも、特に面倒くさいのがインターネットに対するアクセスです。tools.jar では、GET アクセスは実装していますが、POST アクセスは実装していません。POST には POST するだけの意味がある時にしか利用されないので、ここで HttpPost クラスをソースで実装して 超簡易掲示板(CSV) を使って投稿するテストをしています。



画面を二つ使い、include でボタン3つの定義を両方で利用しています。
(Android Studio では、新しいアクティビティを作成すると、AndroidManifest も自動的に書き換えられます。)
※ 具体的なタイムアウト時の処理は行っていません(何も起きません)

 

MainActivity.java

次画面2ボタンでインターネットよりテキストデータを取得し(tools.jar の callHttpGet)、次画面に引き渡してテキストエリアに表示します。そこで投稿ボタンで実際の WEB に対する投稿(HttpPost) となります。
package lightbox.may.toolstest;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import jp.android.work.Tools;

public class MainActivity extends AppCompatActivity {

	// テキストビュー( 表示用 )
	private TextView tv;

	// *****************************************
	// 初期画面構築
	// *****************************************
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 表示部分のインスタンスの取得
		tv = (TextView) MainActivity.this.findViewById(R.id.textView);

		// *****************************************
		// ボタン1 の設定
		// *****************************************
		Button btn1 = (Button)MainActivity.this.findViewById(R.id.button);
		btn1.setText("次画面");
		MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

			// 呼び出し番号 (1)
			Tools.callActivity(MainActivity.this,Main2Activity.class, 1);

			}

		});

		// *****************************************
		// ボタン2 の設定
		// インターネットのデータを次画面に引き渡す
		// *****************************************
		Button btn2 = (Button)MainActivity.this.findViewById(R.id.button2);
		btn2.setText("次画面2");
		btn2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				Tools.callHttpGet(
					"http://toolbox.winofsql.jp/kumonoito.txt",
					"utf-8",
					new Tools.OnAsyncTaskListener() {
						@Override
						public void onAsyncTaskListener(String s) {
							Intent intent = new Intent(MainActivity.this, Main2Activity.class);
							intent.putExtra("requestCode",2);
							intent.putExtra("text",s);
							startActivityForResult(intent, 2);
						}
					});

			}

		});

		// *****************************************
		// ボタン3 の設定
		// ブラウザ呼び出し
		// *****************************************
		Button btn3 = (Button)MainActivity.this.findViewById(R.id.button3);
		btn3.setText("ブラウザ");
		btn3.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				Tools.callBrowser(MainActivity.this,"http://weather.yahoo.co.jp/weather/jp/27/6200.html");

			}

		});

	}

	// *****************************************
	// 第二画面から戻って来た時の処理
	// onActivityResult
	// *****************************************
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

		Log.i("lightbox", String.format("呼び出し番号 : %d", requestCode)  );
		Log.i("lightbox", String.format("戻り番号 : %d", resultCode)  );

		if ( data != null ) {
			// 戻りデータの取得
			String returnData = data.getStringExtra("returnData");
			if (returnData != null) {
				// テキストビューに表示
				tv.setText(returnData);
			}
		}

	}
}


Main2Activity.java
package lightbox.may.toolstest;

import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class Main2Activity extends AppCompatActivity {

	// 呼び出し番号
	private int requestCode;
	// テキストエリア
	private EditText et;

	// *****************************************
	// 初期画面構築
	// *****************************************
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main2);

		// 入力部分のインスタンスの取得
		et = (EditText) Main2Activity.this.findViewById(R.id.editText);

		// *****************************************
		// 前の画面から送られたデータの取得
		// *****************************************
		Intent intent = getIntent();

		// 1) テキストデータ
		String text = intent.getStringExtra("text");
		if ( text != null ) {
			et.setText(text);
		}
		// 2) 整数データ
		requestCode = intent.getIntExtra("requestCode", 0);
		if ( requestCode != 0 ) {
			Log.i("lightbox", String.format("呼び出し番号 : %d", requestCode));
		}

		// *****************************************
		// ボタン1 の設定
		// 整数のみを戻す
		// *****************************************
		Button btn1 = (Button)Main2Activity.this.findViewById(R.id.button);
		btn1.setText("戻る");
		btn1.setTextColor(Color.parseColor("#f84848"));
		btn1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				// 戻り値のみ返す
				setResult(100);

				// 第二画面を終了して初期画面に戻る
				finish();

			}

		});

		// *****************************************
		// ボタン2 の設定
		// *****************************************
		Button btn2 = (Button)Main2Activity.this.findViewById(R.id.button2);
		btn2.setText("投稿");
		btn2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				Intent intent = new Intent();
				setResult(200,intent);

				// エミュレータから PC の WEBサーバへアクセスする場合
//				String url = "http://10.0.2.2/log/easy_board/csvtype/board.php";

				// 実機を PC につないで、WiFi 接続を可能にした場合
				// 192.168.1.2 は PC の IPアドレス
				String url = "http://192.168.1.2/log/easy_board/csvtype/board.php";

				Map<String,String> url_param = new HashMap<String,String>();
				url_param.put("url", url);

				Map<String,String> param = new HashMap<String,String>();
				param.put("send", "send");
				param.put("subject", "テスト投稿");
				param.put("name", "ウインドウビルダー");
				param.put("text", et.getText().toString());
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
				param.put("datetime", sdf.format(new Date()));

				new AsyncTask<Map,Void,String>(){
					@Override
					protected String doInBackground(Map... params) {

						// 引数より URL 部分を取得
						String url = params[1].get("url").toString();

						Log.i("lightbox",url);

						// インターネットアクセス
						return HttpPost.execute(url, params[0], "utf-8");

					}

					@Override
					protected void onPostExecute(String s) {
						Log.i("lightbox",s);
						finish();

					}
				}.execute(param,url_param);



			}

		});

		// *****************************************
		// ボタン3 の設定
		// 整数と文字列を戻す
		// *****************************************
		Button btn3 = (Button)Main2Activity.this.findViewById(R.id.button3);
		btn3.setText("戻る+データ");
		btn3.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				// 渡す値
				Intent intent = new Intent();
				intent.putExtra("returnData", et.getText().toString());
				// 戻り値と値を返す
				setResult(300, intent);

				finish();

			}

		});

	}

}


ボタン部分の画面パーツ( action_buttons.xml )



デザインタブから <include> を選択できます。クリックすると参照可能な画面一覧が表示されるので、選択するとカーソルがコントロールを選択した状態になり、デザイン画面やツリーにドロップ可能になります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1"
        android:id="@+id/button"
        android:layout_weight="1"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button2"
        android:id="@+id/button2"
        android:layout_weight="1"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button3"
        android:id="@+id/button3"
        android:layout_weight="1"
        />

</LinearLayout>

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="lightbox.may.toolstest.MainActivity">


    <include
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/action_buttons"
        android:id="@+id/include2"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/include2">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView"/>
    </ScrollView>
</RelativeLayout>


activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="lightbox.may.toolstest.Main2Activity">

    <include
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/action_buttons"
        android:id="@+id/include"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/editText"
        android:textSize="20dp"
        android:layout_below="@+id/include"
        android:layout_alignParentStart="true"
        android:gravity="top|left"/>

</RelativeLayout>



【2 Android Studioの最新記事】
posted by lightbox at 2016-05-30 18:56 | 2 Android Studio | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり