Получение kotlin.KotlinNullPointerException ArrayList <Album>в HomeAdapter - PullRequest
0 голосов
/ 12 февраля 2019

Получение исключения kotlin.KotlinNullPointerException в getItemCount ().albumList возвращает значение NULL.Может быть, я не объявляю альбом должным образом.Я новичок в Котлине.Но я успешно справился на 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 голосов
/ 13 февраля 2019

Я бы посоветовал вам еще раз взглянуть на документацию.Но чтобы исправить ваш код, вот как должен выглядеть ваш адаптер, и вы передаете значения в конструктор, и вам не нужно беспокоиться о пустых значениях, поскольку вы не передаете пустые значения

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) 
0 голосов
/ 12 февраля 2019

Проблема в том, что fun HomeAdapter() не является конструктором, поэтому albumList никогда не назначается правильно ненулевому значению.

В целом этот код выглядит как попытка перевода с Java на Kotlin и вводит в заблуждение, поскольку он далек от идиоматического Kotlin.Чтобы лучше понять, как это должно выглядеть, я бы предложил вам прочитать официальную документацию ( здесь ) и использовать, например, автоматическое преобразование Java в Kotlin, предлагаемое IntelliJ Idea.

Чтобы дать вам представление, это эквивалентный Java-код для Album класса выше:

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...