我在尝试从 Dagger v2.11 中获取新的 Android dagger 类时遇到错误,该类在我们的项目中运行。我不确定问题出在哪里,因为我已经考虑了 https://google.github.io/dagger//android.html 上的 Android 文档。仍然无法解决这个问题。关于此设置有什么问题的任何想法?
我的申请:
public class MyApplication extends Application implements HasActivityInjector
{
@Inject
AndroidInjector<Activity> androidInjector;
@Override
public void onCreate()
{
super.onCreate();
AppInjector.init(this);
}
@Override
public AndroidInjector<Activity> activityInjector()
{
return androidInjector;
}
}
应用组件:
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
AppModule.class,
ActivityModule.class,
})
public interface AppComponent
{
@Component.Builder
interface Builder
{
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(MyApplication myApplication);
}
Activity 模块:
@Module
abstract class ActivityModule
{
@ContributesAndroidInjector(modules = FragmentModule.class)
abstract MainActivity contributeMainActivity();
// all other activities defined as above
}
fragment 模块:
@Module
abstract class FragmentModule
{
@ContributesAndroidInjector
abstract MyFragment contributeMyFragment();
}
应用注入(inject)器:
public static void init(MyApplication myApplication)
{
DaggerAppComponent.builder().application(myApplication)
.build().inject(myApplication);
myApplication
.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks()
{
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState)
{
handleActivity(activity);
}
@Override
public void onActivityStarted(Activity activity)
{
}
@Override
public void onActivityResumed(Activity activity)
{
}
@Override
public void onActivityPaused(Activity activity)
{
}
@Override
public void onActivityStopped(Activity activity)
{
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState)
{
}
@Override
public void onActivityDestroyed(Activity activity)
{
}
});
}
private static void handleActivity(Activity activity)
{
if (activity instanceof HasSupportFragmentInjector)
{
AndroidInjection.inject(activity);
}
if (activity instanceof FragmentActivity)
{
((FragmentActivity) activity).getSupportFragmentManager()
.registerFragmentLifecycleCallbacks(
new FragmentManager.FragmentLifecycleCallbacks()
{
@Override
public void onFragmentCreated(FragmentManager fm, Fragment f,
Bundle savedInstanceState)
{
if (f instanceof Injectable)
{
AndroidSupportInjection.inject(f);
}
}
}, true);
}
}
应用模块:
@Module(includes = ViewModelModule.class)
class AppModule
{
@Singleton
@Provides
UserDao provideUserDao(MyDatabase db)
{
return db.userDao();
}
// all other DAOs
}
View 模型模块:
@Module
abstract class ViewModelModule
{
@Binds
@IntoMap
@ViewModelKey(UserViewModel.class)
abstract ViewModel bindUserViewModel(UserViewModel userViewModel);
}
主要 Activity :
public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector
{
@Inject
AndroidInjector<Fragment> androidInjector;
@Override
public AndroidInjector<Fragment> supportFragmentInjector()
{
return androidInjector;
}
}
堆栈跟踪:
Error:(29, 10) error: dagger.android.AndroidInjector<android.app.Activity> cannot be provided without an @Provides- or @Produces-annotated method.
dagger.android.AndroidInjector<android.app.Activity> is injected at
com.myapp.MyApplication.androidInjector
com.myapp.MyApplication is injected at
com.myapp.dagger.AppComponent.inject(myApplication)
最佳答案
尝试将 AndroidInjector 替换为 DispatchingAndroidInjector 您的 androidInjector 变量。 那是为我工作。这是我的(kotlin)
class PodcastApp : Application(), HasActivityInjector {
@Inject
lateinit var dispatchingAndroidInjector : DispatchingAndroidInjector<Activity>
companion object {
lateinit var instance: PodcastApp
}
override fun onCreate() {
super.onCreate()
instance = this
FirebaseApp.initializeApp(this)
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
Stetho.initializeWithDefaults(this)
AppInjector.init(this)
}
}
override fun activityInjector(): AndroidInjector<Activity> {
return dispatchingAndroidInjector
}
关于AndroidInjector<android.app.Activity> 不能在没有 @Provides- 或 @Produces- 注释的方法的情况下提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44868784/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension