【发布时间】:2021-04-02 16:28:24
【问题描述】:
Process: com.example.socialapplication, PID: 31405
kotlin.UninitializedPropertyAccessException: lateinit property adapterPosts has not been initialized
at com.example.socialapplication.Fragment.HomeFragment.access$getAdapterPosts$p(HomeFragment.kt:24)
at com.example.socialapplication.Fragment.HomeFragment$loadPosts$postData$1.onDataChange(HomeFragment.kt:104)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.0:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.0:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.0:55)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7807)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
源代码
class HomeFragment : BaseFragment() {
.....
private lateinit var adapterPosts : AdapterGrid
.....
adapterPosts = AdapterGrid(activity, postList)
adapterPosts.notifyDataSetChanged()
}
recyclerView.adapter = adapterPosts // getting error
所需代码
@Suppress("ControlFlowWithEmptyBody", "DEPRECATION")
class HomeFragment : BaseFragment() {
private lateinit var firebaseAuth : FirebaseAuth
private lateinit var ref : DatabaseReference
private lateinit var mDatabase: FirebaseDatabase
private lateinit var shimmerPost : ShimmerFrameLayout
private lateinit var recyclerView : RecyclerView
private lateinit var postList : ArrayList<ModelPost>
private lateinit var adapterPosts : AdapterGrid
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_home, container, false)
findView(view)
initView(view)
return view
}
override fun findView(view: View) {
recyclerView = view.findViewById(R.id.postsRecyclerview)
shimmerPost = view.findViewById(R.id.shimmer_view)
}
override fun initView(view: View) {
firebaseAuth = FirebaseAuth.getInstance()
mDatabase = FirebaseDatabase.getInstance()
val layoutManager = GridLayoutManager(activity, 2)
// tampilkan posting terbaru terlebih dahulu, untuk memuat ini dari yang terakhir
// layoutManager.stackFromEnd = true
// layoutManager.reverseLayout = true
//set layout untuk recyclerView
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = layoutManager
postList = arrayListOf()
loadPosts()
}
override fun initListeners(view: View) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
private fun loadPosts() {
val ref = mDatabase.getReference("Posts")
val postData : ValueEventListener? = object : ValueEventListener{
override fun onDataChange(p0: DataSnapshot) {
postList.clear()
for (ds : DataSnapshot in p0.children){
val modelPost = ds.getValue(ModelPost::class.java)
if (modelPost != null) {
postList.add(modelPost)
}
shimmerPost.stopShimmer()
shimmerPost.visibility = View.GONE
recyclerView.visibility = View.VISIBLE
//adapter
adapterPosts = AdapterGrid(activity, postList)
adapterPosts.notifyDataSetChanged()
}
//set adapter untuk recyclerView
recyclerView.adapter = adapterPosts
}
override fun onCancelled(p0: DatabaseError) {
Toast.makeText(activity, p0.message, Toast.LENGTH_SHORT).show()
}
}
if (postData != null) {
ref.addValueEventListener(postData)
}else{
}
}
【问题讨论】:
-
.....是什么?您可能必须添加整个代码,因为在初始化之前以某种方式调用了recyclerView.adapter = adapterPosts。 -
请编辑问题以显示重现问题的complete minimal code。您现在所拥有的不足以说明究竟出了什么问题以及如何纠正它。
-
请检查上面我分享了所需的代码,如果您需要查看adater类的代码,请告诉我
-
@Android 我找不到您在上面发布的代码中使用
adapterPosts的位置。发布 homefragment 代码 -
错误提示您在使用之前没有初始化
adapterPosts。这种访问发生在HomeFragment.kt:24(第 24 行)
标签: android firebase kotlin android-recyclerview