我是Android和Retrofit的新手,我遇到了一个问题。
我想让我的话说'#34; ServerCommunication" class(singelton),其中所有的Retrofit魔法都已完成,并且它将具有完成REST调用的公共方法。
我想使用这个" ServerCommunication"在我的活动中调用Rest服务的实例,但就是这样。应用程序逻辑应该在活动中完成。所以这样一些活动Login调用方法Login(POJORequest)in" ServerCommunication),通过Retrofit框架完成实际的REST调用并返回一些POJOResponse。因此,Activity并不关心REST通信,而ServerCommunication并不关心应该从REST服务响应应用的逻辑。
通过改造2,我不明白如何阻止Activity等待改造的响应以及如何返回。好吧,我可能认为我可以在活动中使用一些回调方法,因此可以从ServerCommunication"在OnPostExecute()中根据响应中的数据应用一些逻辑。我认为这应该是更简单的方法。
好吧,为了澄清上面的所有混乱,想象一下简单的情况:你在主要活动中有数据,你将这些数据传递给完成REST调用并收到响应的通信类。必须验证此响应才能继续。并且您希望此验证在主要活动中完成,而不是在通信类中完成。
使用Retrofit2在Android中执行此操作的模式是什么?
提前谢谢
答案 0 :(得分:6)
我通常做的事情:
我希望这可以帮助您更接近您想要实现的目标!
答案 1 :(得分:0)
服务接口(IPhotoService):
@GET("/photos/kudos")
Call<String> fetchKudos(@Header("Authorization") String authorization,
@Query("offset") int offset, @Query("mt") boolean mt);
服务impl(PhotoService):
private GoApiProvider<IPhotoService> mGoProvider = new GoApiProvider<>();
public Promiser<List<Photo>, HttpError> fetchKudos() {
return new Promiser<>((resolve, reject) ->
mGoProvider.getService(IPhotoService.class).fetchKudos(mSession.getToken(),
mOffsetKudos, true).enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
if (response.isSuccessful()) {
PhotoParser JSON = new PhotoParser();
try {
mOffsetKudos = mOffsetKudos + 20;
resolve.run(JSON.photosFromJson(response.body()));
} catch (JSONException e) {
Log.e("fetchKudos", e.toString());
}
} else {
reject.run(new HttpError(response.code(), response.message()));
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
reject.run(new HttpError(YPErrorType.Undefined.getType(), t.getMessage()));
}
})
);
}
活动或片段:
private void loadPhoto() {
new PhotoService().fetchKudos()
.success(this::resultSucceeded)
.error(this::resultError);
}
private void resultSucceeded(List<Photo> photos) {
mPhotoAdapter.setItems(photos);
}
private void resultError(HttpError httpError) {
httpErrorToast(httpError);
}
如果您想使用Promizer:Click here