开发日志<二>——笑话模块总结
笑话功能很简单,就是一个列表显示从网络上获取的20条笑话,这里有以下几个知识点需要注意:
<->.MVP +Dragger2模式的使用
这里参考了google的MVP+dragger2的demo,直接在presenter的构造方法上使用@Inject,而在fragment中直接通过Componment来获取presenter对象,在Module中不再去提供Presenter对象。不废话,直接贴代码。
JokerModule.class
@Module
public class JokerModule {
private final JokerContract.View mView;
public JokerModule(JokerContract.View view) {
mView = view;
}
@Provides
JokerContract.View provideTasksContractView() {
return mView;
}
}
JokerComponent.class
@Subcomponent(modules = JokerModule.class)
public interface JokerComponent {
JokerPresenter getJokerPresenter();
}
JokerPresenter.class
public class JokerPresenter implements JokerContract.UserActionsListener {
private APIManager mAPIManager;
private JokerContract.View mView;
PreferencesManager mPreferencesManager;
@Inject
JokerPresenter(APIManager apiManager,JokerContract.View view,PreferencesManager preferencesManager){
mAPIManager = apiManager;
mView =view;
mPreferencesManager=preferencesManager;
}
在Fragment中获取Presenter对象
mPresenter = LeHeApp.get(getActivity()).getAppComponent().plus(new JokerModule(this)).getJokerPresenter();
还有就是参考Google的Demo,将MVP模式中的view 和Presenter的接口放在一个JokerContract类中。
Google的Demo入口
<二>.针对多重JSON返回的解析也做了下处理。初始化retrofit:
Retrofit.Builder builder = new Retrofit.Builder();
builder.client(okHttpClient)
.baseUrl(ApiService.SERVER_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create());
这里已经添加了GsonConverterFactory,所以我将retroft返回的泛型改为Gson的 JsonObject类型,然后在收到的result中获取Joker对象。
@GET("showapi_open_bus/showapi_joke/joke_text")
Observable<JsonObject> getJokersYY(@Header("apikey") String apikey, @Query("page")
以上就是笑话模块的总结,目前只是做到获取数据并显示出来,后期打算增加本地数据库功能,将获取到笑话保存在本地,每次下来刷新从服务器获取最新的,再增加加载更多,则是从本地数据库中获取。