在getItemCount()中获取kotlin.KotlinNullPointerException。 albumList返回null。也许我没有正确声明albumList。我是Kotlin的新手。但是我已经成功地用Java实现了。
private var adapter: HomeAdapter? = null
private var albumList: ArrayList<Album>? = null
override fun onCreate(savedInstanceState: Bundle?)
{
albumList = ArrayList<Album>()
adapter = HomeAdapter(albumList)
recyclerView!!.adapter = adapter
}
class HomeAdapter(albumList: ArrayList<Album>?) : RecyclerView.Adapter<HomeAdapter.MyViewHolder>()
{
private var HomeContext: Context? = null
private var albumList: ArrayList<Album>? = null
fun HomeAdapter(albumList: ArrayList<Album>)
{
this.HomeContext = HomeContext
this.albumList = albumList
}
override fun getItemCount(): Int {
return albumList!!.size!!
}
}
class Album(s: String, i: Int)
{
private var name: String? = null
private var thumbnail: Int = 0
fun Album(name: String, thumbnail: Int)
{
this.name = name
this.thumbnail = thumbnail
}
}
答案 0 :(得分:2)
问题在于fun HomeAdapter()
不是构造函数,因此albumList
从未正确分配给非空值。
通常,代码看起来像是尝试从Java转换为Kotlin,并且极具误导性,远非惯用的Kotlin。为了更好地了解外观,建议您阅读官方文档(here),并使用IntelliJ Idea提供的Java到Kotlin的自动转换。>
为了给您一个想法,上面的Album
类的等效Java代码:
public final class Album {
private String name;
private int thumbnail;
public Album(String s, int i) {
super();
// Note you're not using "s" and "i" here
}
public final void Album(String name, int thumbnail) {
this.name = name;
this.thumbnail = thumbnail;
// note this is an instance method, not the constructor
}
}
答案 1 :(得分:0)
我建议您再看一下文档。但是要修复您的代码,这就是适配器的外观,您可以在构造函数中传递值,而不必担心空值,因为您不会传递任何空值
class HomeAdapter(val context: Context, val albumList: ArrayList<Album>): RecyclerView.Adapter<HomeAdapter.MyViewHolder>(){
override fun getItemCount(): Int {
return albumList.size
}
}
如果您希望能够重新分配变量,则这是您的专辑Pojo,然后将它们声明为var,因为您使用的数据会自动获取toString,equals和hashCode
data class Album(val name: String, val thumbnailID: Int)