開發日誌<二>——笑話模塊總結
笑話功能很簡單,就是一個列表顯示從網絡上獲取的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")
以上就是笑話模塊的總結,目前只是做到獲取數據並顯示出來,後期打算增加本地數據庫功能,將獲取到笑話保存在本地,每次下來刷新從服務器獲取最新的,再增加加載更多,則是從本地數據庫中獲取。