ちゃんと実装する場合はそれなりのコードに差し替えたほうがいいと思いますが、とにかくエミュレータ起動した時点で時間のかかる作業が確定してしまうので、できるかぎり楽したい場合に使えます。 tools.jar (Tools/Tools2/TestArrayAdapter) とりあえずテストしたい場合、jar で使えるのなら簡単に済みます。libs フォルダに保存して、右クリックから Add as Library を実行すると参照可能になります。 あるいは、ソースコードをそのまま作成してカスタマイズするといいと思います。 1) Tools.httpGet インターネットからテキスト情報を取得する為の最低限の実装です。後述の、callHttpGet では、AsyncTask 内から呼び出しています。 2) Tools.callHttpGet そもそも、インターネットアクセスをしたいから AsyncTask を使う事になるのですが、目的は文字列が欲しいだけなので、最低限のコード記述で処理できるようにしています。 AsyncTask では、onPostExecute で UI スレッドの処理を行いますが、その中から引数のインターフェイス(Tools.OnAsyncTaskListener)内のメソッド(onAsyncTaskListener)を呼び出して、呼び出し側の記述を簡潔にする事ができます。 ▼ 呼び出し方法
Tools.callHttpGet( "目的の URL", "utf-8", new Tools.OnAsyncTaskListener() { @Override public void onAsyncTaskListener(String s) { // s が欲しかった文字列 // ここで UI スレッドの処理を行います } } );
3) Tools.callBrowser URL を扱う処理で良く使う事になる、ACTION_VIEW によるブラウザの呼び出しです 4) Tools.messageBox YES か NO、または単純に OK だけのいずれかのメッセージボックスを引数の種類で差し替え可能な簡単な使いやすいものです。
// 単純確認メッセージボックス Tools.messageBox(MainActivity.this, "こんにちは", new Tools.OnMessageBoxListener() { @Override public void onMessageBoxYesListener() { } @Override public void onMessageBoxNoListener() { } }); // 単純確認メッセージボックス(イベントなし) Tools.messageBox(MainActivity.this, "こんにちは", null); // YES or NO メッセージボックス Tools.messageBox(MainActivity.this, "API呼び出し", "実行しますか?", new Tools.OnMessageBoxListener() { @Override public void onMessageBoxYesListener() { } @Override public void onMessageBoxNoListener() { } });
5) Tools.callActivity 単純なアクティビテイの呼び出しです。putExtra を使わずに単に Activity を呼び出す時に使用します 6) Tools.putPreferences MODE_PRIVATE でデフォルトでは無い データを書き込むのに使用します。書き込んだデータは、アプリ内で読み込む事ができます。 7) Tools.getPreferences Tools.putPreferences で書き込んだデータを読み込む事ができます。 8) Tools.getDateString 現在の日付・時間文字列をフォーマット文字列を渡して取得します。 9) Tools.shortToast / Tools.longToast Toast を表示します tools.java
package jp.android.work; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.AsyncTask; import android.widget.Toast; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.Map; import java.util.TimeZone; /** * Created by lightbox on 2015/06/11. */ public class Tools { public interface OnAsyncTaskListener { abstract public void onAsyncTaskListener(String s); } public static void callHttpGet(String url, String charset, final OnAsyncTaskListener listener) { new AsyncTask<String, Void, String>() { // 非同期処理 @Override protected String doInBackground(String... params) { String result = null; result = Tools.httpGet( params[0], params[1], null ); return result; } // UI スレッド処理 @Override protected void onPostExecute(String json) { super.onPostExecute(json); listener.onAsyncTaskListener(json); } }.execute(url, charset); } public interface OnMessageBoxListener { abstract public void onMessageBoxYesListener(); abstract public void onMessageBoxNoListener(); } // 確認 メッセージボックス( メッセージのみ ) public static void messageBox(Activity context, String message, final OnMessageBoxListener listener) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); alertDialogBuilder.setTitle("確認"); alertDialogBuilder.setMessage(message); alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { listener.onMessageBoxYesListener(); } } }); alertDialogBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (listener != null) { listener.onMessageBoxNoListener(); } } }); alertDialogBuilder.setCancelable(true); // アラートダイアログを作成します AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); } // YES or NO メッセージボックス( タイトルとメッセージ両方指定) public static void messageBox(Activity context, String title, String message, final OnMessageBoxListener listener) { // ダイアログ作成用オブジェクト作成 AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); alertDialogBuilder.setTitle(title); alertDialogBuilder.setMessage(message); // YES ボタン作成 alertDialogBuilder.setPositiveButton("YES", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { listener.onMessageBoxYesListener(); } } }); // NO ボタン作成 alertDialogBuilder.setNegativeButton("NO", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { listener.onMessageBoxNoListener(); } } }); alertDialogBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (listener != null) { listener.onMessageBoxNoListener(); } } }); alertDialogBuilder.setCancelable(true); // アラートダイアログを作成します AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); } public static void callBrowser(Activity context, String url) { // ブラウザの呼び出し Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); return; } // 対応するアプリが無い Tools.longToast( context, "ブラウザを呼び出せません" ); return; } // 短いトースト public static void shortToast(Activity context,String message) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } // 長いトースト public static void longToast(Activity context,String message) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } // 単純なアクティビテイの呼び出し public static void callActivity(Activity context, Class<?> cls, int requestCode) { // Activity呼び出し Intent intent = new Intent(context, cls); context.startActivityForResult(intent, requestCode); } // Private な アプリデータの保存 public static void putPreferences(Activity context, String target, String key, String data) { SharedPreferences sp = context.getSharedPreferences(target, context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString(key, data); editor.commit(); } // Private な アプリデータの読み込み public static String getPreferences(Activity context, String target, String key) { SharedPreferences sp = context.getSharedPreferences(target, context.MODE_PRIVATE); return sp.getString(key, "_nodata"); } // 日付・時間文字列取得 public static String getDateString(String format) { TimeZone tz = TimeZone.getTimeZone("Asia/Tokyo"); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(format); sdf.setTimeZone(tz); String result = sdf.format(date); return result; } // 指定した URL へ 任意の charset で処理 public static String httpGet(String targetUrl, String targetCharset, Map<String, String> params) { StringBuffer web_data = new StringBuffer(); try { // Query String の作成( 必要無ければ引数を null とする ) String data = ""; if (params != null) { Iterator<String> it = params.keySet().iterator(); String key = null; String value = null; while (it.hasNext()) { key = it.next().toString(); value = params.get(key); if (!data.equals("")) { data += "&"; } data += key + "=" + URLEncoder.encode(value, targetCharset); } if (!data.equals("")) { targetUrl = targetUrl + "?" + data; } } // ********************************************** // インターネットへの接続 // ********************************************** // 読み込む WEB上のターゲット URL url = new URL(targetUrl); // 接続オブジェクト HttpURLConnection http = (HttpURLConnection) url.openConnection(); // GET メソッド http.setRequestMethod("GET"); // 接続 http.connect(); // ********************************************** // ストリームとして読み込む準備 // ********************************************** // 以下読み込み3点セット InputStream / InputStreamReader / BufferedReader InputStream input_stream = http.getInputStream(); // UTF-8 でリーダーを作成 InputStreamReader input_stream_reader = new InputStreamReader(input_stream, targetCharset); // 行単位で読み込む為の準備 BufferedReader buffered_reader = new BufferedReader(input_stream_reader); // ********************************************** // 行の一括読み込み // ********************************************** String line_buffer = null; // BufferedReader は、readLine が null を返すと読み込み終了 while (null != (line_buffer = buffered_reader.readLine())) { web_data.append(line_buffer); web_data.append("\n"); } // ********************************************** // 接続解除 // ********************************************** http.disconnect(); } catch (Exception e) { // 失敗 System.out.println(e.getMessage()); } return web_data.toString(); } }
関連する記事
|
【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 でメール送信を行う為のテンプレート
- tools.jar の callHttpGet のテストと include による画面再利用と HttpPost クラスで掲示板書き込み / Android Studio
- Android の Spinner に関するいろいろな実装と知識 / Android Studio
- AsyncTask を継承して、Drawable を取得する専用クラスを作成する : Android Studio