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>
|
【Android Studio 2の最新記事】
- Android : WebView 経由のデータベースアプリケーション
- Android で WebView を使ってWEBにあるデータベースのデータを取得する為のクラス
- WebView で JavaScript にデータを渡したい時に注意する事
- シンプル Android Data Binding : Android Studio 2.2 / 古い定義との違いと、以前のプロジェクトでエラーが出る場合の対処
- Android Studio で、ListView アプリケーションを作成するテンプレート
- Android : Data Binding で ListView へのデータ表示を凄く簡単にする
- Android Studio で理解不能なエラーが出た時の対処方法 : Invalidate Caches / Restart
- Android : TabHost のタブに下から上へのアニメーションを設定して、include で同一画面を使用するので 回転しないように AndroidMainfest で設定する
- Android : TabHost 内の各 TabSpec 内にある TextView の 端末回転時における保存と復帰
- Android の 端末回転時の EditText と TextView の違い
- ViewPager 内のイベントで設定した TextView の値を保持する Fragment 処理
- ExpandableListView を使用して、タップした時に明細データ表示する
- カスタム・リストビュー・ダイアログ : DialogFragment 内の ListView を ArrayAdapter でカスタムする
- カスタム・リストビュー・ダイアログ : ダイアログ内の ListView を ArrayAdapter でカスタムする
- AlertDialog.Builder の setItems(int itemsId, DialogInterface .OnClickListener listener) を使用した、ListVie..
- AsyncTask<Params, Progress, Result> の Progress を無しにして、onPostExecute 内の処理を interface を使って MainA..
- javamail-android + AsyncTask でメール送信を行う為のテンプレート
- Android の Spinner に関するいろいろな実装と知識 / Android Studio
- AsyncTask を継承して、Drawable を取得する専用クラスを作成する : Android Studio
- Android Studio が 2.0 になりました。前からの内容も含めて整理してます。