Articles of 匕首

为什么不将OrmLiteSqliteOpenHelper绑定到Application而不是Activity?

在ORMLite文档中,建议为每个活动创建OrmLiteSqliteOpenHelper 。 由于获取帮助程序只需要一个Context对象,为什么不为整个Application对象创建一次数据库帮助Application ? 这样就可以使用Dagger(或其他注入框架)将数据库助手注入需要它的类中。 有没有理由不创建一个单一的应用程序范围的数据库助手? 是否最好让每个活动都有自己的数据库助手? 我可以想象这会使助手的缓存大小变小,因为缓存只包含与其活动相关的对象。

如何为MortarActivityScope提供一个活动,而不会在方向更改时泄漏活动?

我有一个Mortar应用程序,MortarActivityScope是根范围内的第一个孩子。 MortarActivityScope有一个ActivityScope,@为注入类提供一个活动: @Module(addsTo = ApplicationModule.class, injects = {Foo.class, SomePresenter.class, AnotherPresenter.class}) public class ActivityModule { private final Activity activity; public ActivityModule(Activity activity) { this.activity = activity; } @Provides Activity provideActivity() { return activity; } } public class Foo { private final Activity activity; @Inject(Activity activity) { this.activity = activity; } public void doSomethingWithActivity() { // do […]

使用AccountManager,Retrofit和Dagger实现OAuth2

我正在试图找出实现支持OAuth2流的AccountManager.getAuthToken()的Retrofit客户端的最佳方法。 我跟随U2020 理想情况下,我想在这些线上有一个简单的注射器 公共类ExampleFragment扩展了InjectionFragment { @Inject ApiDatabase数据库; @Override public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); subscribe(database.getSomeData(),…); } } 我正在考虑一个类似于示例的RequestInterceptor public final class ApiHeaders实现RequestInterceptor { ApiKeyProvider apiKeyProvider; @注入 public ApiHeaders(ApiKeyProvider apiKeyProvider){ this.apiKeyProvider = apiKeyProvider; } @覆盖 public void intercept(RequestFacade request){ //如何处理getAuthToken的exception? request.addHeader(“Authorization”,“Bearer”+ apiKeyProvider.getAuthKey()); } } 和 公共类ApiKeyProvider { AccountManager accountManager; 活动活动; public ApiKeyProvider(活动活动,AccountManager accountManager){ this.activity =活动; this.accountManager = […]

有关Dagger在注入依赖项时何时回归reflection的文档?

我的团队在我们的Android应用程序中采用了Dagger进行dependency injection,我必须说我们喜欢它到目前为止。 但是,我们希望确保我们有效地使用它。 我想知道是否有人可以解释或是否有任何文档解释Dagger回归注入dependency injection的案例?

Android:Dagger 2和构造函数注入

我是匕首的新手,我的构造函数/方法注入似乎不起作用。 不起作用意味着仍然请求注入的字段。 这是我的代码: @Module public class AppContextModule { private final Context appContext; public AppContextModule(Context appContext) { this.appContext = appContext; } @Singleton @Provides public Context getAppContext() { return appContext; } } @Singleton @Component(modules = {AppContextModule.class}) public interface MyComponent { void inject(ActivitiesLifeCycleListener obj); void inject(WebViewManager obj); Context context(); } public final class MyClass { private final WeakReference […]

从Android Application类刷新Dagger 2实例

我在我的模块类中有一组@Provides和@Provides方法,用于在整个应用程序中创建Singleton实例。 一切都很好,除了几个瓶颈情况,如下所示: 步骤1.我正在从OKHttpClient创建一个带有Auth令牌的Retrofit实例, OKHttpClient每次都进行经过身份validation的api调用(通过SharedPreferences处理Auth令牌检索和插入)。 但是,在我通过清除数据库和共享首选项值注销应用程序之后重新启动活动时,问题就开始了。 步骤2.注销后,我再次请求获取身份validation令牌并再次插入SharedPreferences以供将来使用。 第3 @Provides :现在,如果我继续进行剩余的api调用,Dagger @Provides和@Provides方法的前一个实例保持相同,除非我通过从最近的任务中清除它来重新启动应用程序。 (新的身份validation令牌未更新) 需要修复: 如何强制触发Dagger提供程序方法再次触发或撤消它? 是否有任何方法可以像应用程序重新启动时那样刷新应用程序类数据。 请find我项目中使用的Dagger 2架构: NetworkModule.java (Dagger Module类) @Module public class NetworkModule { private Context context; public NetworkModule(Application app) { this.context = app; } @Provides @Named(“network.context”) Context providesContext() { return context; } @Singleton @Provides OkHttpClient providesOkHttpClient(@Named(“network.context”)final Context context) { final UserProfile userProfile = GsonUtils.createPojo(SharedPrefsUtils.getString(Constants.SHARED_PREFS.USERS_PROFILE, […]

尽管Dagger可以生成点文件,但它无法创建对象图

在现有的应用程序中,我正在努力设置Dagger(1.0.1)。 它被配置为使用ProGuard但我使用-dontobfuscate禁用了此测试。 当我启用dagger-compiler时,它能够成功生成带有依赖关系图的点文件,但是当我删除编译器并在Release模式下构建应用程序时,它会在启动期间崩溃,抱怨它无法创建对象图。 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.corp.myapp/com.corp.myapp.ui.activity.MainActivity}: java.lang.IllegalStateException: Errors creating object graph: No injectable members on com.corp.myapp.core.services.ConnectionMonitor. Do you want to add an injectable constructor? required by com.corp.myapp.core.services.ConnectionMonitor com.corp.myapp.ui.activity.MyAppBaseActivity.connectionManager No injectable members on com.corp.myapp.ui.crouton.CroutonManager. Do you want to add an injectable constructor? required by com.corp.myapp.ui.crouton.CroutonManager com.corp.myapp.ui.activity.MyAppBaseActivity.croutonManager No injectable members on com.corp.core.assembler.ResourceAssembler. Do you […]

在运行时更改改进OkHttpClient的ConnectionTimeout

我正在使用Dagger注入RestAdapter.Builder,我在该函数中创建了一个OkHttpClient。 function如下: @Provides @Singleton @Named(“JSON”) public RestAdapter.Builder provideJsonRestAdapterBuilder(final ChangeableEndpoint changeableEndpoint, final Set requestInterceptors) { final OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setConnectTimeout(Constants.CONNECT_TIMEOUT, TimeUnit.SECONDS); okHttpClient.setWriteTimeout(Constants.WRITE_TIMEOUT, TimeUnit.SECONDS); okHttpClient.setReadTimeout(Constants.READ_TIMEOUT, TimeUnit.SECONDS); try { okHttpClient.setCache(new Cache(mApplication.getCacheDir(), Constants.CACHE_SIZE)); } catch (final IOException e) { LOG.warn(e.getMessage(), e); } final Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, new DateDeserializer()) .registerTypeAdapter(AbstractAction.class, new AbstractActionDeserializer()) .create(); return new […]

在方向改变时处理匕首组件

假设这里已经说过,开发人员有责任保留组件实例以实现自己的范围逻辑(因为范围方法将为给定组件返回相同的实例)。 通过活动生命周期保持此组件引用的干净方法是什么? 示例:您正在实施MVP模式,因此您需要在Activity中使用Presenter。 此演示者可以执行网络操作来下载项目。 当设备旋转时,您的Activity将被销毁并重新创建,但您希望保持网络运行,并且只需返回预旋转演示者。 为提供Presenter的组件定义一个自定义PerActivity范围是解决方案,因此您必须通过此循环保持Component实例,以便在首次启动Activity时注入相同的Presenter实例。 我们怎么处理这个? 我想到了一种组件缓存(如HashMap?),它可以由生活在Application类中的Application Component提供。

使用Dagger进行嵌套/递归注射

使用Dagger时,有哪些方法可以在也通过注入实例化的对象上自由/简单地实例化@Inject字段。 例如,下面的代码会将types为Bar的对象注入给定的Foo对象。 它将以显示的两种方式之一执行此操作。 但是,每个Bar对象的Sly字段与该行为不匹配。 富 public class Foo { @Inject Bar bar; public String getValue() { return “Foo’s bar value: ” + bar.getValue(); } } 砰 public class Bar { @Inject Sly sly; public String getValue() { return “Bar’s sly value: ” + sly.getValue(); } } 狡猾 public class Sly { public String getValue() { […]