Kotlin org.kodein.di.kodein$NotFoundException:未找到绑定的绑定<;LLApi>;()与?<;LoginFragment>;().? { ? }
我正在用objectbox+Reformation+kodein做一个项目。 但我得到了这个错误 org.kodein.di.kodein$NotFoundException:找不到带?()的bind()的绑定。?{?} KodeInApp.ktKotlin org.kodein.di.kodein$NotFoundException:未找到绑定的绑定<;LLApi>;()与?<;LoginFragment>;().? { ? },kotlin,retrofit2,objectbox,kodein,Kotlin,Retrofit2,Objectbox,Kodein,我正在用objectbox+Reformation+kodein做一个项目。 但我得到了这个错误 org.kodein.di.kodein$NotFoundException:找不到带?()的bind()的绑定。?{?} KodeInApp.kt class KodeinApplication : Application(), KodeinAware { override val kodein = Kodein.lazy { import(androidXModule(this@Kode
class KodeinApplication : Application(), KodeinAware {
override val kodein = Kodein.lazy {
import(androidXModule(this@KodeinApplication))
bind() from singleton { AppVersion }
bind() from singleton { NetworkConnectivityInterceptor(instance()) }
bind() from singleton { LLApi }
bind() from singleton { LoginRepository(instance(), instance()) }
bind() from provider { LoginViewModelFactory(instance()) }
}
}
BaseRepository.kt
abstract class BaseRepository<T>(
val service: LLApi,
@PublishedApi internal val boxStore: BoxStore
class LoginRepository(service: LLApi, store: BoxStore) :
BaseRepository<UserInfo>(service, store) {
private var loginRequest: LoginRequest? = null
init {
this.loginRequest = loginRequest
}
override fun loadData(): LiveData<UserInfo> {
return fetchData { service.userLogin(loginRequest) }
}
class LoginViewModelFactory(private val repository: LoginRepository) :
ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return LoginViewModel(repository) as T
}
class LoginViewModel(val repository: LoginRepository) : BaseViewModel<UserInfo>() {
private lateinit var user: LiveData<UserInfo>
override fun getDataFromService(): LiveData<UserInfo> {
user = repository.loadData()
return user
}
override fun saveTODatabase(data: UserInfo) {
repository.saveToDatabase(data)
}
)
LoginFragment.kt
class LoginFragment() : Fragment(), KodeinAware {
override val kodein by kodein()
private val factory: LoginViewModelFactory by instance()
private lateinit var binding: LoginFragmentBinding
private lateinit var viewModel: LoginViewModel
private var emailOrPhone: EditText? = null
private var password: EditText? = null
companion object {
fun newInstance(): LoginFragment {
return LoginFragment()
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.setContentView(requireActivity(), R.layout.login_fragment)
viewModel = ViewModelProvider(
this, factory
).get(LoginViewModel::class.java)
val view = inflater.inflate(R.layout.login_fragment, container, false)
emailOrPhone = view?.findViewById(R.id.edt_number_or_email)
password = view?.findViewById(R.id.edt_password)
return view
}
fun userLoginService() {
val email = binding.edtNumberOrEmail.text.toString()
val password = binding.edtPassword.text.toString()
val liveData = viewModel.getDataFromService()
liveData.observe(this, Observer {
if (it != null) {
viewModel.saveTODatabase(it)
}
})
}
}
请随时询问所需的任何文件,并请帮助我解决此问题。可能有帮助?可能有帮助?
data class LoginRequest(
@SerializedName("mobile_no") val mobileNumber:String?,
val password:String?
class LoginFragment() : Fragment(), KodeinAware {
override val kodein by kodein()
private val factory: LoginViewModelFactory by instance()
private lateinit var binding: LoginFragmentBinding
private lateinit var viewModel: LoginViewModel
private var emailOrPhone: EditText? = null
private var password: EditText? = null
companion object {
fun newInstance(): LoginFragment {
return LoginFragment()
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.setContentView(requireActivity(), R.layout.login_fragment)
viewModel = ViewModelProvider(
this, factory
).get(LoginViewModel::class.java)
val view = inflater.inflate(R.layout.login_fragment, container, false)
emailOrPhone = view?.findViewById(R.id.edt_number_or_email)
password = view?.findViewById(R.id.edt_password)
return view
}
fun userLoginService() {
val email = binding.edtNumberOrEmail.text.toString()
val password = binding.edtPassword.text.toString()
val liveData = viewModel.getDataFromService()
liveData.observe(this, Observer {
if (it != null) {
viewModel.saveTODatabase(it)
}
})
}