非同期タスクでSandBoxにアクセスする

Android ではアクティビティ内に通信処理を直接書くとコンパイルできない。
仕方がないのでスレッド生成して書こうとしたら、AsyncTask で処理をしろと神様(Android SDK)がおっしゃってる。

案の定Web上には、中途半端なソースしかない。
サンプルを参考にしながら使い回しができるクラスを書いた。

SandBoxAsyncTask.java

/**
 * 非同期タスクでSandBoxにアクセスする
 * @author Ryan's Factory
 * @since 2014/10/01
 */
public class SandBoxAsyncTask extends AsyncTask<SandBox.Requestor, Void, String> {

	/**
	 * コンテキスト
	 */
	private Context context;
	/**
	 * コールバック
	 */
	private SandBoxAsyncTaskCallback callback;
	/**
	 * 通信処理クラス
	 */
	private SandBox sandbox;
	/**
	 * コンストラクタ
	 */
	@SuppressWarnings("unused")
	private SandBoxAsyncTask() {};
	/**
	 * コンストラクタ
	 * @param context コンテキスト
	 * @param sandbox 通信処理クラス
	 * @param callback コールバック
	 */
	public SandBoxAsyncTask(Context context, SandBox sandbox, SandBoxAsyncTaskCallback callback) {
		this.context = context;
		this.sandbox = sandbox;
		this.callback = callback;
	}
	/**
	 * 通信処理を行なう前に呼び出される
	 */
	@Override
	protected void onPreExecute() {
		callback.onPreExecuteSandBox(context,sandbox.getProgress());
	}
	/**
	 * 通信処理を呼び出す
	 */
	@Override
	protected String doInBackground(SandBox.Requestor... params) {
		return sandbox.request(params);
	}
	/**
	 * 通信処理が完了した
	 */
	@Override
	protected void onPostExecute(String result) {
		if( sandbox.isSuccess() ) {
			// 取得できた
			callback.onSuccessSandBox(result,context,sandbox.getProgress());
		} else {
			// 取得できなかった
			callback.onFailedSandBox(sandbox.getErrorCode(),context,sandbox.getProgress());
		}
	}
}
AsyncTask<SandBox.Requestor, Void, String>

第一パラメータ SandBox.Requestor:通信処理を実行する関数に渡されるパラメータ

サンドボックスクラス内で宣言する。

第二パラメータ Void:処理中に何かしたいとき中断とか、だけど実装しないのでVoidにする

第三パラメータ String:処理終了後にわたされるパラメータ

JSONデータが目的なのでStringにする

インターフェイスについては次へ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>