【android】apiへリクエストしてcallbackを実装する方法メモ
はじめに
android調べながらやってるけどJavaの基礎もあんまないから時間かかる。
今回やりたいのはapiたたいてレスポンスによって成功用と失敗用のcallbackを実行するようなこと。
調べたり質問しながらやってるけどinterface使うといいらしい。
実装1
呼び出し側に成功時と失敗時のコールバック用インターフェスを実装させる。
すっきりしてる気もするけど、コールバックを必ず実装させなければならないのがちょっと嫌かも。
ApiManager.java(呼ばれる側)
public class ApiManager { public interface ApiManagerCallback { public void success(Object obj); public void failed(Object obj); } private ApiManagerCallback apiManagerCallback; public void setCallbacks(ApiManagerCallback apiManagerCallback) { this.apiManagerCallback = apiManagerCallback; } public void callApi() { try { apiManagerCallback.success("success"); } catch (Exception e) { apiManagerCallback.failed("failed"); } } }
MainActivity.java(呼び出す側)
public class MainActivity extends AppCompatActivity implements ApiManager.ApiManagerCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ApiManager apiManager = new ApiManager(); apiManager.setCallbacks(this); apiManager.callApi(); } public void success(Object obj) { // 成功 } public void failed(Object obj) { // 失敗 } }
実装2
実装1より呼び出す側のコードが少し見辛い気もするけど、失敗時のコールバックが必須でないのがいいかも。
ApiManager.java(呼ばれる側)
public class ApiManager { public interface ApiManagerCallback { void call(Object obj); } void connect(final ApiManagerCallback success, final ApiManagerCallback failed) { try { success.call("success!!"); } catch (Exception e) { if (failed != null) { failed.call("failed"); } } } }
MainActivity.java(呼び出す側)
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ApiManager apiManager = new ApiManager(); apiManager.connect(new ApiManager.ApiManagerCallback() { @Override public void call(Object obj) { // 成功 } }, new ApiManager.ApiManagerCallback() { @Override public void call(Object obj) { // 失敗 } }); } }
きっともっといい書き方あるんだろうけど、自分の頭ではこんなものかな。難しい。。。もっといい書き方教えてください。以上です