java如何在模型视图演示者模式中使用存储库模式和交互者模式?
我正在模型视图演示模式的帮助下开发一个应用程序
我利用了改造,所以我有一个ApiClient和一个带有端点的ApiInterface。我在RemoteDataSource类中实现了该接口,我在Repository类中调用了该类
我的问题是——如何利用Interactior类使存储库与演示者通信
以下是我到目前为止的代码:
ApiInterface
public interface ApiInterface {
@GET("?")
Call<ArrayList<Movie>> getMoviesByTitle(@Query("t") String title,@Query("apiKey") String apiKey);
}
远程数据源类
private static MovieRemoteDataSource instance;
private final ApiInterface service;
public MovieRemoteDataSource(ApiInterface movieApi) {
service = ApiClient.createService(ApiInterface.class);
}
public static MovieRemoteDataSource getInstance(ApiInterface movieApi) {
if (instance == null) {
instance = new MovieRemoteDataSource(movieApi);
}
return instance;
}
@Override
public void getMovies(String title, String apiKey, final LoadMovieCallBack callback) {
service.getMoviesByTitle(title,apiKey).enqueue(new Callback<ArrayList<Movie>>() {
@Override
public void onResponse(Call<ArrayList<Movie>> call, Response<ArrayList<Movie>> response) {
ArrayList<Movie> movies = response.body();// != null ? //response.body().getTitle() : null;
if (movies != null && !movies.isEmpty()) {
callback.onMoviesLoaded(movies);
} else {
callback.onDataNotAvailable();
}
}
@Override
public void onFailure(Call<ArrayList<Movie>> call, Throwable t) {
callback.onError();
}
});
}
带有回调的数据源接口
public interface MovieDataSource {
interface LoadMovieCallBack{
void onMoviesLoaded(ArrayList<Movie> movies);
void onDataNotAvailable();
void onError();
}
void getMovies(String title, String apiKey,LoadMovieCallBack callback);
}
存储库
private MovieRemoteDataSource movieRemoteDataSource;
public MoviesRepository() {//ApiInterface movieApi) {
//this.service = ApiClient.createService(ApiInterface.class);
}
public static MoviesRepository getInstance(ApiInterface service) {
if (instance == null) {
instance = new MoviesRepository();
}
return instance;
}
public void getMovies(String title, String apiKey ) {
movieRemoteDataSource.getMovies(title,apiKey,this);
}
# 1 楼答案
在
MoviesRepository
中,应该用Callback
声明一个函数。你的Presenter
应该实现MovieDataSource.LoadMovieCallBack
,并在调用MoviesRepository
时传递它Here谷歌
MVP
已经完成了todo应用程序示例,您可以参考它。但现在它不赞成了,因为谷歌推荐MVVM