Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Hilt:具有抽象活动的抽象方法抛出错误_Android_Kotlin_Dagger 2_Dagger Hilt - Fatal编程技术网

Android Hilt:具有抽象活动的抽象方法抛出错误

Android Hilt:具有抽象活动的抽象方法抛出错误,android,kotlin,dagger-2,dagger-hilt,Android,Kotlin,Dagger 2,Dagger Hilt,我试着用剑柄创建基本活动。但这是一个错误 error: [Hilt] public abstract class ActivityBase<V extends androidx.lifecycle.ViewModel, B extends androidx.viewbinding.ViewBinding> extends androidx.appcompat.app.AppCompatActivity { ^ Found unimplemented

我试着用剑柄创建基本活动。但这是一个错误

error: [Hilt]
public abstract class ActivityBase<V extends androidx.lifecycle.ViewModel, B extends androidx.viewbinding.ViewBinding> extends androidx.appcompat.app.AppCompatActivity {
                ^
  Found unimplemented abstract methods, [getViewBinding()], in an abstract module, com.baseproject.base.ActivityBase. Did you forget to add a Dagger binding annotation (e.g. @Binds)?
错误:[Hilt]
公共抽象类ActivityBase扩展了androidx.appcompat.app.AppCompatActivity{
^
在抽象模块com.baseproject.base.ActivityBase中找到未实现的抽象方法[getViewBinding()]。是否忘记添加匕首绑定批注(例如@Binds)?
基本活动:

@InstallIn(SingletonComponent::class)
@Module
abstract class ActivityBase<V : ViewModel, B: ViewBinding> : AppCompatActivity() {

    var mViewModel: V? = null
    protected var mBinding: B? = null


    private fun getViewModelClass(): Class<V> {
        val type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
        return type as Class<V>
    }

 
    abstract fun getViewBinding(): B

    lateinit var navHostFragment: NavHostFragment
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        init()
        setContentView(mBinding?.root)
        setUpHideKeyBoard()
    }

    protected open fun init() {
        mBinding = getViewBinding()
        mViewModel = ViewModelProvider(this).get(getViewModelClass())
    }
}
@AndroidEntryPoint
class MainActivity : ActivityBase<ViewModelBase, ActivityMainBinding>() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
     override fun getViewBinding() = ActivityMainBinding.inflate(layoutInflater)
    }
@InstallIn(SingletonComponent::class)
@模块
抽象类ActivityBase:AppCompatActivity(){
var mViewModel:V?=null
受保护的变量mBinding:B?=null
私有函数getViewModelClass():类{
val type=(javaClass.genericSuperclass作为ParameterizedType)。实际类型参数[0]
返回类型为类
}
抽象趣味getViewBinding():B
lateinit var navHostFragment:navHostFragment
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
init()
setContentView(mBinding?.root)
setUpHideKeyBoard()
}
受保护的open-fun init(){
mBinding=getViewBinding()
mViewModel=ViewModelProvider(this).get(getViewModelClass())
}
}
主要活动:

@InstallIn(SingletonComponent::class)
@Module
abstract class ActivityBase<V : ViewModel, B: ViewBinding> : AppCompatActivity() {

    var mViewModel: V? = null
    protected var mBinding: B? = null


    private fun getViewModelClass(): Class<V> {
        val type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
        return type as Class<V>
    }

 
    abstract fun getViewBinding(): B

    lateinit var navHostFragment: NavHostFragment
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        init()
        setContentView(mBinding?.root)
        setUpHideKeyBoard()
    }

    protected open fun init() {
        mBinding = getViewBinding()
        mViewModel = ViewModelProvider(this).get(getViewModelClass())
    }
}
@AndroidEntryPoint
class MainActivity : ActivityBase<ViewModelBase, ActivityMainBinding>() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
     override fun getViewBinding() = ActivityMainBinding.inflate(layoutInflater)
    }
@AndroidEntryPoint
类MainActivity:ActivityBase(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
}
重写fun getViewBinding()=ActivityMainBinding.inflate(LayoutFlater)
}
如果我同时删除@Module和@InstallIn(SingletonComponent::class)注释,它会抛出下面的错误

error: method getActivityFactory in class DefaultViewModelFactories cannot be applied to given types;
    return DefaultViewModelFactories.getActivityFactory(this);
                                    ^
  required: ComponentActivity,Factory
  found: Hilt_MainActivity<viewBinding>
  reason: actual and formal argument lists differ in length
  where B is a type-variable:
    B extends ViewBinding declared in class Hilt_MainActivity
错误:类DefaultViewModelFactorys中的方法getActivityFactory无法应用于给定类型;
返回DefaultViewModelFactorys.getActivityFactory(此);
^
必需:组件活动,工厂
发现:Hilt_Main活动
原因:实际参数列表和正式参数列表长度不同
其中B是类型变量:
B扩展类Hilt_MainActivity中声明的ViewBinding

为什么
ActivityBase
@Module
注释,为什么它是
SingletonComponent
的一部分。你想做什么?这看起来很混乱。@ADM,我想用入口点创建我的主活动,如果我从ActivityBase中删除这两个注释,它就会抛出错误。@Mehta如@ADM所述,那些
@Modulee
@InstallIn
对您的活动的批注毫无意义。@skywall,如果我从抽象活动中删除了这两个批注,则会引发另一个错误。请参阅我更新的问题。