【发布时间】:2017-01-21 16:15:25
【问题描述】:
我目前正在开发一个应用程序,并希望使用当前最先进的 Android 库:RxAndroid、Dagger2 和 Realm。我在网上找不到好的例子,所以我不得不在这里问。
1。为什么我应该使用 Observable 作为 Realm 查询的返回类型?
public Observable<Bla> getBla() {
Bla b = realm.where(Bla.class).findFirst();
return Observable.just(b);
}
在大多数情况下,Realm 查询在 UIThread 上运行,所以为什么我不应该只将结果返回为 List 而不是
Observable<List<Bla>>
也许有人知道这个 lib 组合中领域的一个很好的例子?
2。为什么我能够在模块中不提及提供者的情况下注入服务。我的结构有问题吗?
@Inject
TableService mTableService;
(代码如下)
3。 ServiceComponent需要AppComponent中的Application,如何正确配置@Component?
@Singleton
@Component(modules = {AppModule.class, ServiceModule.class})
public interface AppComponent {
void inject(MainActivity activity);
}
@Singleton
@Component(modules = {AppModule.class, ServiceModule.class})
public interface ServiceComponent {
void inject(MainActivity activity);
}
public class AppModule {
Application mApplication;
public AppModule(Application application) {
mApplication = application;
}
@Provides
@Singleton
Application providesApplication() {
return mApplication;
}
@Provides
@Singleton
RealmConfiguration provideRealmConfiguration(Application application) {
return new RealmConfiguration.Builder(application)
.schemaVersion(1)
.deleteRealmIfMigrationNeeded()
.build();
}
@Provides
Realm provideRealm(RealmConfiguration realmConfiguration) {
try {
return Realm.getInstance(realmConfiguration);
} catch (Exception cause) {
Realm.deleteRealm(realmConfiguration);
return Realm.getInstance(realmConfiguration);
}
}
}
@Module
public class ServiceModule {
public ServiceModule() {
}
@Provides
@Singleton
GuestService provideGuestService(Realm realm) {
return new GuestService(realm);
}
}
public class Application extends android.app.Application {
private AppComponent mAppComponent;
@Override
public void onCreate() {
super.onCreate();
mAppComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public AppComponent getAppComponent() {
return mAppComponent;
}
}
谢谢!
【问题讨论】:
标签: android realm dagger-2 rx-android