1.声明一个interface
public interface ICallback<RESULT> {
void onCallback(RESULT data);
void onError(Throwable error);
}
2.当进行异步操作时 比如网络去请求的结果
public void updateCurrentUserInfo(final DBCurrentUser currentUser, final ICallback<DBCurrentUser> callback) {
ApiEndpointClient.getEndpointV2().getCurrentUser("Bearer " + SharedPrefUtils.getInstance().getString(AppConstant.SharedPreferenceKey.CURRENT_TOKEN))
.enqueue(new Callback<HttpResponse<CurrentUserInfo>>() {
@Override
public void onResponse(Call<HttpResponse<CurrentUserInfo>> call, Response<HttpResponse<CurrentUserInfo>> response) {
if (currentUser != null && HttpRequestUtil.hasValidBody(response) && response.body().getData().getAttributes() != null) {
MonkeyLog.D("CurrentUserHelper updateCurrentUserinfo() success updateUserinfo = " + response.body().getData());
CurrentUserInfo currentUserInfo = response.body().getData();
if (currentUserInfo != null) {
currentUserInfo.updateCurrentUserInfo(currentUser);
if (callback != null) {
callback.onCallback(currentUser);
}
}
} else {
onFailure(call, new NullPointerException("Null user info returned"));
}
}
@Override
public void onFailure(Call<HttpResponse<CurrentUserInfo>> call, Throwable t) {
MonkeyLog.D("CurrentUserHelper updateCurrentUserinfo() onFailure() 111 t = " + t);
if (t != null) {
t.printStackTrace();
}
if (callback != null) {
callback.onError(t);
}
}
});
}
3.外围去调取的时候:
CurrentUserHelper.getInstance().updateCurrentUserInfo(dbCurrentUser, new ICallback<DBCurrentUser>() {
@Override
public void onCallback(DBCurrentUser currentUserInfo) {
dispatchActivity();
}
@Override
public void onError(Throwable error) {
dispatchActivity();
}
});
本文介绍了一个通用异步回调接口的设计方法,并通过具体的代码示例展示了如何使用该接口实现网络请求的数据更新流程。
1853

被折叠的 条评论
为什么被折叠?



