Articles of 匕首

我如何获得使用Gradle的Dagger和Butterknife?

我把我的项目与Butterknife做的很好,做视图注射。 但是我需要添加Dagger才能注入依赖关系。 我添加了注释处理器工具 Gradle插件,并带有相应的Dagger要求(为简洁起见只显示了修改过的部分); buildScript { repositories { maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } dependencies { … classpath 'com.jimdo.gradle:gradle-apt-plugin:0.2-SNAPSHOT' } } apply plugin: 'apt' dependencies { apt "com.squareup.dagger:dagger-compiler:${daggerVersion}" … } 现在,当我构build并运行应用程序时,用@InjectView注释标记的属性不会被Butterknife发出的以下debugging消息注入; D/ButterKnife﹕ Looking up view injector for com.example.MainActivity D/ButterKnife﹕ Not found. Trying superclass com.example.FactListAbstractActivity D/ButterKnife﹕ Not found. Trying superclass android.app.Activity

类的模块适配器无法加载。 请确保为该模块运行代码生成

当我尝试运行我的应用程序时出现此错误: E/AndroidRuntime(2314): java.lang.RuntimeException: Unable to create application in.mubble.billbytwo.GlobalApp: java.lang.IllegalStateException: Module adapter for class in.mubble.billbytwo.RootModule could not be loaded. Please ensure that code generation was run for this module. 我想我使用的是基于Ant的构build系统,但我不确定,这是我的第一个匕首项目,我在Eclipse IDE上。 PS:我已经尝试将java-writer和dagger-compiler添加到工厂path,正如其他一些post所示,但没有运气。 这里是一个完整的堆栈跟踪: FATAL EXCEPTION: main Process: in.mubble.billbytwo, PID: 2314 java.lang.RuntimeException: Unable to create application in.mubble.billbytwo.GlobalApp: java.lang.IllegalStateException: Module adapter for class in.mubble.billbytwo.RootModule could not be loaded. […]

匕首2在Kotlin未解决的参考

我正在尝试在我的Android项目中使用Dagger 2,并在Kotlin中进行编码。 我从Dagger 2回购Android的简单的例子。 我已经设法在Android Studio中使用来自dagger-android-gradle-sample的示例正确configuration项目,它包含正确configuration的gradle文件。 现在我开始将java类更改为kotlin。 这是自动转换的DemoApplication.java在kotlin中的样子: public class DemoApplication : Application() { Singleton Component(modules = array(javaClass<AndroidModule>())) trait ApplicationComponent { public fun inject(application: DemoApplication) public fun inject(homeActivity: HomeActivity) public fun inject(demoActivity: DemoActivity) } public var component: ApplicationComponent? = null override fun onCreate() { super.onCreate() component = `Dagger_DemoApplication$ApplicationComponent`.builder().androidModule(AndroidModule(this)).build() component!!.inject(this) } } 匕首生成的类在Kotlin中可见,但它抱怨($)类名称中使用的符号。 ($)在Kotlin有特殊的目的,所以我想这就是为什么。 你可以注意到auto-convertion用(`)符号封装类名,所以编辑器不会抱怨它。 不幸的是,编译器失败: […]

匕首不能注入types参数字段

我正在处理一个Android应用程序,我试图注入一个types参数化在抽象类中的字段:BaseListFragment public abstract class BaseListFragment<E, A extends ArrayAdapter<E>, S> extends BaseFragment { @Inject protected S service; } 但是在编译时出现以下错误:error:找不到符号类S 这里是我的代码BaseFragment: public class BaseFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((App) getActivity().getApplication()).inject(this); } } 这里是我的服务模块: @Module( complete = false, library = true ) public class ServiceModule { @Provides @Singleton BucketService provideBucketService(RestAdapter restAdapter) { […]

匕首2中的“HasFragmentInjector”的实际用法是什么?

以前我已经实现了dagger2 v2.2,但是现在他们已经添加了dagger.android部分。 所以我正在创build示例项目。 我意识到旧的方法@Provide和@Modules和@Components等注释,但从匕首2.8+他们已经添加了这个android支持库,也有一些新的注射像@ ActivityKey , @ ContributesAndroidInjector , @ Subcomponent.Builder等 所以我的问题是它带来了什么好处。 它是否解决像基类的Inject方法可以为所有子类工作的问题? 还是其他的好处? 第二个问题 – HasFragmentInjector只是像我们以前使用片段pipe理器一样加载片段的活动? 或者我错过了一些东西? 请不要为所有图书馆用户提供更多信息的问题,因为图书馆的文档不提供这样的答案。

匕首:class级不能用钥匙绑定

我正在尝试第一次匕首,并configuration模块后,我得到一个错误,我不明白。 我的代码是: public class Parrot { private Language language; @Inject public Parrot(Language language) { this.language = language; } public void sayHello() { System.out.println(language.getSalute()); } } public interface Language { public String getSalute(); } public class EnglishLanguage implements Language { @Override public String getSalute() { return "Hello!"; } } 我的模块是 @Module( injects = Language.class ) public […]

Robolectric不使用testing应用程序

根据这个链接,我可以创build一个testing应用程序,Robolectric将在testing中自动开始使用。 我无法得到这个工作。 我使用Dagger进行dependency injection,并为Activity和Application创build了注入包装类。 然后,我的每个活动都扩展了包装活动类,而不是普通的旧Activity 。 我遇到的问题是,在testing中, Application模块提供的依赖关系无法parsing,因此testing失败。 这是因为我们大多数的testing只是build立一个活动(使用Robolectric.buildActivity() ),而不是从Application运行。 我希望以某种方式修改Robolectric testrunner以在Application下运行我们的testing。 要么就是按照上面的链接所述使用testing应用程序。 我创build了一个testing应用程序,并且仍然得到相同的testing错误,因为这个testing应用程序没有运行testing。 我试着将testing应用程序移动到不同的软件包等,但没有改变。 我正在寻找一些关于如何去做我想做的事的build议。 会对那些有Dagger经验的人以及他们如何进行testing特别感兴趣。

Dagger +翻新dynamicurl

问题 我需要从USERinput的域调用API,我需要在调用插入的数据之前编辑我的Retrofit单例。 有没有办法“重置”我的单身,迫使它重新创build? 要么 有没有办法更新我的baseUrl与我的数据(也许在拦截?)就在通话之前? 码 单身 @Provides @Singleton Retrofit provideRetrofit(SharedPreferences prefs) { String apiUrl = "https://%1s%2s"; apiUrl = String.format(apiUrl, prefs.getString(ACCOUNT_SUBDOMAIN, null), prefs.getString(ACCOUNT_DOMAIN, null)); OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new HeaderInterceptor()) .build(); return new Retrofit.Builder() .baseUrl(apiUrl) .addConverterFactory(GsonConverterFactory.create()) .client(httpClient) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); } @Provides @Singleton API provideAPI(Retrofit retrofit) { return retrofit.create(API.class); } API @FormUrlEncoded @POST("endpoint") Observable<Response> logIn(@Field("login") […]

匕首模块包含循环

我还是新来的匕首,并试图得到一堆东西。 我想把我的模块分成逻辑组,每个逻辑组都提供自己的function,但基本上就像在一个模块中一样。 例如,假设我的主应用程序模块定义如下: //com.example.android.MyAppModule.java @Module( includes = AnalyticsModule.class, injects = { <snip> } ) public class MyAppModule { // various provides } 我有另外一个像这样定义的模块,它build立了一个ErrorReporter接口并提供具体的实现。 // com.example.android.analytics.AnalyticsModule.java @Module( addsTo = MyAppModule.class, injects = { MyApp.class } ) public class AnalyticsModule(){ // ErrorReporter is a public interface and ErrorReporterImpl is a package-local final concrete class that implements it […]

与Android的匕首:如何使用MVP注入上下文?

在开发Android应用程序时,我偶然发现了一个问题。 我刚开始使用Dagger,所以我知道一些基本的概念,但是在教程和用例范围之外使用它时,事情就变得不那么清晰了。 所以要切中要害。 在我的应用程序中,我使用了这个博客中描述的MVP: http : //antonioleiva.com/mvp–android/ 所以起初我是将Interactor类(处理数据的类)注入Presenter类,一切正常。 但后来我实现了使用SQLite数据库的方法,所以现在需要在Interactor类中使用Context。 我无法弄清楚我应该如何正确地做到这一点? 我的临时解决方法是从我的应用程序中排除Dagger,并在创buildPresenter类时在构造函数中传递Contextvariables,然后在Presenter中创buildInteractor类,但是我想使用Dagger。 所以我目前的应用程序看起来像这样。 MyActivity implements MyView { MyPresenter p = new MyPresenter(this, getApplicationContext()); } MyPresenter中的构造函数 MyPresenter(MyView view, Context context) { this.view = view; MyInteractor i = new MyInteractor(context); } 而在MyInteractor构造函数中,我将Context分配给一个私有variables。 我只需要将MyPresenter注入MyInteractor ,因为这是需要针对不同实现进行testing的应用程序的一部分。 但是,如果它也可以注入MyPresenter MyActivity ,那将是伟大的:) 我希望有人有一些经验,我想要实现:)