在HomeAdapter中获取kotlin.KotlinNullPointerException ArrayList <album>

时间:2019-02-12 19:28:43

标签: android android-studio kotlin

在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
    }
}

2 个答案:

答案 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)