Firebase 使用查询时出现KotlinNullException
我正在尝试构建一个应用程序,将FirebaseDatabase中的图像显示到RecyclerView中,类似于这样,但使用Kotlin,现在我有了Firebase 使用查询时出现KotlinNullException,firebase,android-studio,firebase-realtime-database,kotlin,Firebase,Android Studio,Firebase Realtime Database,Kotlin,我正在尝试构建一个应用程序,将FirebaseDatabase中的图像显示到RecyclerView中,类似于这样,但使用Kotlin,现在我有了Kotlin.KotlinNullPointerException,它指向此代码行 var options = FirebaseRecyclerOptions.Builder<Blog>() .setQuery(query!!, Blog::class.java) .build() 我的数据库看起来像: 在
Kotlin.KotlinNullPointerException
,它指向此代码行
var options = FirebaseRecyclerOptions.Builder<Blog>()
.setQuery(query!!, Blog::class.java)
.build()
我的数据库看起来像:
在
onCreate
中最初分配查询之前,您试图使用它。只有在query
具有非空值后,才应等待创建选项。请注意,您的选项
位于类成员级别,在Android调用您的onCreate
之前,将对其进行评估。您试图在onCreate
中初始分配查询
。只有在query
具有非空值后,才应等待创建选项。请注意,您的options
位于类成员级别,在Android调用您的onCreate
将options
移动到onCreate方法并解决问题之前,会对其进行评估,谢谢将options
移动到onCreate方法并解决问题,谢谢
class MainActivity : AppCompatActivity() {
private var mDatabase:DatabaseReference? = null
private var mBlogList:RecyclerView?=null
private var query:Query?=null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navBar.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
mDatabase=FirebaseDatabase.getInstance().getReference().child("mall")
mDatabase?.keepSynced(true)
mBlogList = findViewById(R.id.recyclee)
mBlogList?.setHasFixedSize(true)
mBlogList?.layoutManager = LinearLayoutManager(this)
query = mDatabase?.orderByKey()
}
var options = FirebaseRecyclerOptions.Builder<Blog>()
.setQuery(query!!, Blog::class.java)
.build()
override fun onStart() {
super.onStart()
val mAdapter = object : FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
options) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BlogViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.cardview, parent, false)
return BlogViewHolder(view)}
override fun onBindViewHolder(holder: BlogViewHolder, position: Int, model: Blog) {
holder.setTitle(model.title)
holder.setDes(model.des)
holder.setImage(applicationContext, model.image)
}
}
mBlogList?.adapter = mAdapter
}
inner class BlogViewHolder : RecyclerView.ViewHolder{
var mView:View?=null
constructor(itemView: View?) : super(itemView) {
this.mView = itemView
}
fun setTitle(title:String){
var postTitle = mView?.findViewById<TextView>(R.id.post_title)
postTitle?.text = title
}
fun setDes(des:String){
var postDes = mView?.findViewById<TextView>(R.id.post_des)
postDes?.text = des
}
fun setImage(ctx:Context, image:String){
var postImage = mView?.findViewById<ImageView>(R.id.post_title)
Picasso.get().load(image).into(postImage)
}
}
}
class Blog(var title: String?, var des: String?, var image: String?)