android - IllegalStateException:系统服务在 onCreate() 之前对活动不可用当我尝试在 Hilt 中提供活动时
问题描述
主要活动
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
刀柄模块
@Module
@InstallIn(SingletonComponent::class)
class AppModule {
@Singleton
@Provides
fun provideActivity(): MainActivity = MainActivity()
@Singleton
@Provides
fun provideActivityUtils(@ActivityRetainedScoped context: MainActivity): ActivityUtils =
ActivityUtilsImpl(context)
}
以及具有所需功能的 utils 类
class ActivityUtilsImpl @Inject constructor(@ActivityRetainedScoped private val activity:
MainActivity) : ActivityUtils {
override fun showKeyboard() {
val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as
InputMethodManager?
imm?.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0)
}
}
当我尝试使用活动实例从 utils 类调用某些内容时,我收到错误 java.lang.IllegalStateException: System services not available to Activities before onCreate ()
试过@ActivityContext同样的事情,我怎样才能让它正常调用
解决方案
@Singleton @Provides fun provideActivity(): MainActivity = MainActivity()
从来没有手动实例化过一个活动。
应该
@InstallIn(ActivityComponent::class)
@Module
class ActivityModule {
@Provides @ActivityScope fun activityUtils(activity: Activity): ActivityUtils = ActivityUtilsImpl(activity)
推荐阅读
- python - 学生ID的数据框组
- java - 我创建了一个类,我还想创建一个接口来插入值而不是代码本身。我怎样才能做到这一点?
- python - Mass DM 机器人工作正常,现在它不会发送消息
- tensorflow - 如何连接两个在一个维度上大小相同但在另一个维度上大小不同的张量流张量?
- flutter - 当应用程序热重启时,列的子项的长度加倍
- django - 我应该为每个页面创建一个应用程序吗?(姜戈)
- facebook - 使用 facebook api,我如何获取通过从我的网站共享内容创建的帖子的帖子 ID?
- c# - 如何反序列化这个 JSON 对象?
- reactjs - 在反应中添加排序图标
- python - Django Migrating DB django.db.utils.ProgrammingError: 关系“django_site”不存在