Не удается оценить com.example.ganz.minigamesortnumbers.LevelAdapter $ MyViewHolder.toString () - PullRequest
0 голосов
/ 23 октября 2018

Да, мой метод выдал исключение 'java.lang.NullPointerException' , да я гуглил и яндекс темы о NullPointerException.Но все же я не могу разрешить свои ошибки.Краткое объяснение: я создаю небольшие игры, в которых вы должны нажимать на раскрученные числа в порядке возрастания.Работает без ошибок.Мой адаптер тасует и правильно ставит ограниченные числа.Но я не могу справиться с щелчком, когда нажимаю кнопку.Однако, когда я отлаживаю, это дает мне некоторые ошибки, такие как 'Line 36 in LevelAdapter.kt No executable code found at line 36 in class com.example.ganz.minigamesortnumbers.LevelAdapter$MyViewHolder$bind$1 Suspend: thread' (например, потоки также находятся в строках 15, 19, 26 и 36 в LevelAdapter.kt, в строках 31 и 47 в LevelActivity.kt) и 'Method threw 'java.lang.NullPointerException' exception. Cannot evaluate com.example.ganz.minigamesortnumbers.LevelAdapter$MyViewHolder.toString()'.Чтобы решить последнюю проблему, мне посоветовали перейти в настройки, щелкнув правой кнопкой мыши -> Показать как -> и поставив галочку «toString».Но это было изначально помечено.Кстати, я снял галочку и снова поставил галочку.Тем не менее, это не помогло мне.Итак, где я допустил ошибку?

LevelActivity.kt

package com.example.ganz.minigamesortnumbers

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.RecyclerView
import android.widget.Toast
import kotlinx.android.synthetic.main.level.*
import java.util.*
import kotlin.collections.ArrayList


class LevelActivity : AppCompatActivity(), LevelAdapter.Listener {

    private var numbersList: ArrayList<LevelModel>? = null
    private var numbersAdapter: LevelAdapter? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.level)

        setSupportActionBar(tbr_level)
        shuffleNumbers(64.toString())
        initRecycler()
        btn_back.setOnClickListener { finish() }

        Toast.makeText(this, "Heeeeey!!", Toast.LENGTH_SHORT).show()

    }

    private fun shuffleNumbers(rangeOfNumbers: String) {

        val arrTest = arrayOfNulls<Int>(1000)
        for (i in arrTest.indices) {
            arrTest[i] = i
        }
        Arrays.asList(arrTest).shuffle()

        numbersList = ArrayList()

        for (i in 0 until rangeOfNumbers.toInt()) {
            numbersList!!.add(arrTest[i]?.let { LevelModel(it.toString()) }!!)
        }
        numbersList!!.shuffle()
    }

    private fun initRecycler() {
        val layoutManager: RecyclerView.LayoutManager =
                GridLayoutManager(this, 8)
        rv_level.layoutManager = layoutManager
        numbersAdapter = LevelAdapter(numbersList!!, this)
        rv_level.adapter = numbersAdapter
    }

    override fun onItemClick(levelModel: LevelModel) {
        tv_level_title.text = "It is working!!"
        Toast.makeText(
                this,
                "${levelModel.randomNumbers} Hee",
                Toast.LENGTH_SHORT).show()
    }

}

LevelAdapter.kt

package com.example.ganz.minigamesortnumbers

import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.cardview_number.view.*

class LevelAdapter(
        private val data: ArrayList<LevelModel>,
        private val listener: Listener) :
        RecyclerView.Adapter<LevelAdapter.MyViewHolder>() {


    interface Listener {
        fun onItemClick(levelModel: LevelModel)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {

        holder.bind(data[position], listener, position)
    }

    override fun getItemCount(): Int = data.count()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {

        val view: View
        val inflater = LayoutInflater.from(parent.context)
        view = inflater.inflate(R.layout.cardview_number, parent, false)
        return MyViewHolder(view)
    }

    class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {

        fun bind(levelModel: LevelModel, listener: Listener, position: Int) {

            itemView.btn_numbers.text = levelModel.randomNumbers
            itemView.setOnClickListener { listener.onItemClick(levelModel) }
        }
    }

}
...