【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) {
// 失敗
}
});
}
}きっともっといい書き方あるんだろうけど、自分の頭ではこんなものかな。難しい。。。もっといい書き方教えてください。以上です