機能追加検討 (続続々)
昨日時点でできあがり、なんてことは全然なくって手を入れねば、なソレは満載です。例えば編集画面な実装で登録ボタンの onClick な callback で新規と更新の実装なんて一箇所を除いてほぼ一緒。
if (mode.equals(Intent.ACTION_INSERT)) { new Thread(new Runnable() { @Override public void run() { try { JSONFunctions.POSTfromURL(URL + POST, mDefaultHttpClient, mParams); setResult(RESULT_OK, new Intent()); mProgressDialog.dismiss(); finish(); } catch (Exception e) { Log.e(TAG, "Exception + " + e); } } }).start(); } else if (mode.equals(Intent.ACTION_EDIT)) { new Thread(new Runnable() { @Override public void run() { try { JSONFunctions.PUTfromURL(URL + PUT + id, mDefaultHttpClient, mParams); setResult(RESULT_OK, new Intent()); mProgressDialog.dismiss(); finish(); } catch (Exception e) { Log.e(TAG, "Exception + " + e); } } }).start(); }
自分で書いててこんな事言うのもアレですが見事ですね。
つうか実は JSONFunctions の中では以下なカンジで共通の手続き呼び出してて、昨日まではそのメソドは private になっていたのですが、こんな例が出るのであれば、ということで public にしちゃってたり。
とりあえず通常の i/f が例えば以下あたり。
public static String POSTfromURL(String url, DefaultHttpClient httpclient, List<NameValuePair> params) throws IOException, ClientProtocolException, RuntimeException { HttpPost request = new HttpPost(url); request.setEntity(new UrlEncodedFormEntity(params)); return getHTTPResponseBodyString(request, httpclient); } public static String PUTfromURL(String url, DefaultHttpClient httpclient, List<NameValuePair> params) throws IOException, ClientProtocolException, RuntimeException { HttpPut request = new HttpPut(url); request.setEntity(new UrlEncodedFormEntity(params)); return getHTTPResponseBodyString(request, httpclient); }
上記の getHTTPResponseBodyString を直接呼び出す形にしてあげれば良いはず。おそらくはこれに渡す request (HttpRequestBase 型にしとく必要あり) はインスタンス属性にしてあげる必要があると思われます。確かパラメータな変数は属性にしてるはず。
つうか
DRY 回避な方法として Java って関数ポインタみたいなソレって無いのかなぁ。あるいは lambda な手続きオブジェクト云々とか。interface を作って実装側で切り替え、みたいな形で、なのかどうか。
このあたりが Java は微妙にアレだったりする印象があるのですが、良い方法があるのでしょうか > 識者な方々
さらに
よくよく考えてみるに、POST と PUT 限定で共通化しちゃえば良いのかな、とか?