如何在android中使用Dagger和MVP
我想用Rxjava、Dagger、Kotin和MVP开发一个应用程序如何在android中使用Dagger和MVP,android,kotlin,nullpointerexception,dagger-2,dagger,Android,Kotlin,Nullpointerexception,Dagger 2,Dagger,我想用Rxjava、Dagger、Kotin和MVP开发一个应用程序 我写了下面的代码,但运行应用程序时会显示nullPointerExecetpion错误。 我知道我的代码错误的nullPointerExeception,但我试图找到我的错误,但我做不到 我的基本片段代码: abstract class BaseFragment : Fragment(), BaseView { var presenter: BasePresenter<*>? = null ab
我写了下面的代码,但运行应用程序时会显示
nullPointerExecetpion
错误。我知道我的代码错误的
nullPointerExeception
,但我试图找到我的错误,但我做不到我的基本片段代码:
abstract class BaseFragment : Fragment(), BaseView {
var presenter: BasePresenter<*>? = null
abstract fun initializeDagger()
abstract fun initializePresenter()
abstract var layoutID: Int
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(layoutID, container, false)
initializeDagger()
initializePresenter()
return view
}
override fun onDetach() {
super.onDetach()
presenter?.onDestroy()
}
}
class HomeTodayPresenter @Inject constructor(
val repositoryUseCase: RepositoryUseCase, disposable: CompositeDisposable
) : BasePresenter<HomeTodayView>(disposable) {
private var todayList = ArrayList<Today>()
fun onCreate() {
view?.initRepositoryList(todayList)
getTodayList()
}
fun onTodayRefreshList() {
getTodayList()
}
private fun getTodayList() {
compositeDisposable.add(
repositoryUseCase.getAuctionsToday()
.subscribe({ responseResult ->
view?.hideLoader()
responseResult?.let { itResponse ->
itResponse.res?.let { itRes ->
itRes.today?.let { itToday ->
if (itToday.size > 0) {
todayList.clear()
todayList.addAll(itToday)
view?.loadRepositoryList()
}
}
}
}
}, { e ->
view?.let { itView ->
e.message?.let { itErr ->
itView.showErrorMessage(itErr)
}
itView.hideLoader()
}
})
)
}
}
class HomeTodayFragment : BaseFragment(), HomeTodayView {
@Inject
lateinit var homeTodayPresenter: HomeTodayPresenter
lateinit var todayAuctionsAdapter: TodayAuctionsAdapter
lateinit var layoutManager: LinearLayoutManager
private val swipeRefreshListener = SwipeRefreshLayout.OnRefreshListener {
homeTodayPresenter.onTodayRefreshList()
}
override fun initRepositoryList(list: ArrayList<Today>) {
layoutManager = LinearLayoutManager(requireContext())
todayAuctionsAdapter = TodayAuctionsAdapter(list)
requireContext().initRecyclerView(homeFragToday_list, layoutManager, todayAuctionsAdapter)
}
override fun loadRepositoryList() {
todayAuctionsAdapter.notifyDataSetChanged()
}
override fun hideLoader() {
homeFragToday_loader.visibility = View.GONE
}
override fun showErrorMessage(msg: String) {
Log.e("responseErr", msg)
}
override fun initializeDagger() {
AndroidInjection.inject(requireActivity())
}
override fun initializePresenter() {
super.presenter = homeTodayPresenter
homeTodayPresenter.view = this
}
override var layoutID: Int = R.layout.fragment_home_today
private lateinit var toolbarTile: TextView
lateinit var handler: Handler
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
homeTodayPresenter.onCreate()
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//Initialize
activity?.let {
toolbarTile = it.findViewById(R.id.homePage_toolbarTitle)
}
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser) {
//Initialize
handler = Handler()
//Set delay
handler.postDelayed({
//Set title
toolbarTile.text = resources.getString(R.string.today)
toolbarTile.setTextColor(ResourcesCompat.getColor(resources, R.color.green_active, null))
}, 10)
}
}
}
显示此行的错误:homeTodayPresenter.onCreate()
如何修复它?您没有空指针,您有一个
未初始化的PropertyAccessException
,因为字段homeTodayPresenter
没有正确注入。是您Jake Wharton
来自谷歌吗?;)@m0skit0,我怎样才能做到?你能帮我把密码发给我吗?请原谅我的朋友,因为我是amateur@HarounHajem“不,我的朋友:)你能帮我吗?@Jakewarton对不起,男人匕首是痛苦的,帮不了你。如果可以,我希望你没有空指针,你有一个未初始化的PropertyAccessException
,因为字段homeTodayPresenter
没有正确注入。是你Jake Wharton
来自谷歌吗?;)@m0skit0,我怎样才能做到?你能帮我把密码发给我吗?请原谅我的朋友,因为我是amateur@HarounHajem“不,我的朋友:)你能帮我吗?@Jakewarton对不起,男人匕首是痛苦的,帮不了你。如果可以,我会的
kotlin.UninitializedPropertyAccessException: lateinit property homeTodayPresenter has not been initialized
at com.app.applisttestapp.UI.Home.Fragments.Today.HomeTodayFragment.onCreateView(HomeTodayFragment.kt:69)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2539)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:875)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1227)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1293)