Я сталкиваюсь с ошибкой "Нет подключенного адаптера; пропускается макет" - PullRequest
0 голосов
/ 23 марта 2020

Я новичок в kotlin и дооснащаюсь, когда я запускаю это приложение, оно ничего не показывает на моем устройстве. Но я проверяю logcat и обнаружил эту ошибку No adapter attached; skipping layout. Иногда go Я отправляю этот вопрос, некоторые люди отвечают на этот вопрос, но этот ответ не верный

CountryActivity.kt

var recyclerView: RecyclerView = findViewById(R.id.countryRecyclerView)
recyclerView.layoutManager = LinearLayoutManager(this)

var apiInterface: CountryDataInterface = 
CountryApiClient.getApiClient()!!.create(CountryDataInterface::class.java)
apiInterface.getCountryData().enqueue(object : Callback<List<Country>> {
override fun onFailure(call: Call<List<Country>>, t: Throwable) {}

override fun onResponse(call: Call<List<Country>>, response: Response<List<Country>>) {
val countryData = response.body()!!
recyclerView.adapter = CountryDataAdapter(countryData)

CountryDataAdapter.kt

class CountryDataAdapter(var countryDataList: List<Country>?):
RecyclerView.Adapter<CountryDataAdapter.RecyclerViewHolder>() {
class RecyclerViewHolder(itemView: View):RecyclerView.ViewHolder(itemView) {
var countryName: TextView = itemView.findViewById(R.id.countryName)
var casesTotal: TextView = itemView.findViewById(R.id.casesTotal)
var casesToday: TextView = itemView.findViewById(R.id.casesToday)
var deathTotal: TextView = itemView.findViewById(R.id.deathTotal)
var deathToday: TextView = itemView.findViewById(R.id.deathToday)
var recoveredAll: TextView = itemView.findViewById(R.id.recoveredAll)
var activeAll: TextView = itemView.findViewById(R.id.activeAll)
var criticalAll: TextView = itemView.findViewById(R.id.criticalAll)

fun bindData(countryDataList: List<Country>?, position: Int){
    countryName.text = countryDataList!!.get(position).countryName.toString()
    casesTotal.text = countryDataList!!.get(position).cases.toString()
    casesToday.text = countryDataList!!.get(position).todayCases.toString()
    deathTotal.text = countryDataList!!.get(position).deathTotal.toString()
    deathToday.text = countryDataList!!.get(position).deathToday.toString()
    recoveredAll.text = countryDataList!!.get(position).recovered.toString()
    activeAll.text = countryDataList!!.get(position).activePatient.toString()
    criticalAll.text = countryDataList!!.get(position).critical.toString()
  }
 }

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
var view: View = LayoutInflater.from(parent!!.context).inflate(R.layout.country_row,parent,false)
return RecyclerViewHolder(view)
}

override fun getItemCount(): Int {
return countryDataList!!.size
}
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
holder.bindData(countryDataList,position)
}
}

1 Ответ

1 голос
/ 23 марта 2020

Я думаю, что ваша проблема в том, что вы вызываете recyclerView.adapter = CountryDataAdapter(countryData) в своей функции Asyn c.

Из того, что показывает ваш пост

override fun onResponse(call: Call<List<Country>>, response: Response<List<Country>>) {
val countryData = response.body()!!
recyclerView.adapter = CountryDataAdapter(countryData)

recyclerView.adapter = CountryDataAdapter(countryData) в onResponse, то есть асинхронный c, когда ваш рабочий обед не установлен, ваш адаптер не настроен, поскольку он ожидает от сети результата для его установки.

Было бы лучше установить его на:

  1. В начале своей деятельности добавьте var countryData: List<Country> = ArrayList()

РЕДАКТИРОВАТЬ после проверки Repo:

Вы ничего не получите, потому что ваш звонок входит в onFailure. Вы должны добавить журнал, чтобы увидеть такие вещи.

CountryActivity:

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

        val recyclerView: RecyclerView = findViewById(R.id.cRecyclerView)
        var countryData: List<Country> = ArrayList()
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.setHasFixedSize(true)
        recyclerView.adapter = CountryDataAdapter(countryData)
       // recyclerView.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))

        val apiInterface: CountryDataInterface = CountryApiClient.getApiClient()!!.create(CountryDataInterface::class.java)
        apiInterface.getCountryData().enqueue(object : Callback<List<Country>> {
            override fun onFailure(call: Call<List<Country>>, t: Throwable) {

                val data = Country(1, 2,3,4,5,6,7,8)
                countryData = listOf(data)
                recyclerView.adapter = CountryDataAdapter(countryData)

                Log.d("onFailure", "ERROR")
            }

            override fun onResponse(call: Call<List<Country>>, response: Response<List<Country>>) {
                if (response.isSuccessful) {
                    countryData = response.body()!!
                    recyclerView.adapter = CountryDataAdapter(countryData)
                }
            }

        })

    }

Адаптер:

class CountryDataAdapter(private var countryDataList: List<Country>):
    RecyclerView.Adapter<CountryDataAdapter.RecyclerViewHolder>() {
    class RecyclerViewHolder(itemView: View):RecyclerView.ViewHolder(itemView) {
        val countryName: TextView = itemView.findViewById(R.id.countryName)
        val casesTotal: TextView = itemView.findViewById(R.id.casesTotal)
        val casesToday: TextView = itemView.findViewById(R.id.casesToday)
        val deathTotal: TextView = itemView.findViewById(R.id.deathTotal)
        val deathToday: TextView = itemView.findViewById(R.id.deathToday)
        val recoveredAll: TextView = itemView.findViewById(R.id.recoveredAll)
        val activeAll: TextView = itemView.findViewById(R.id.activeAll)
        val criticalAll: TextView = itemView.findViewById(R.id.criticalAll)

        fun bindData(countryDataList: List<Country>, position: Int){
            val item = countryDataList[position]
            countryName.text = item.countryName.toString()
            casesTotal.text = item.cases.toString()
            casesToday.text = item.todayCases.toString()
            deathTotal.text = item.deathTotal.toString()
            deathToday.text = item.deathToday.toString()
            recoveredAll.text = item.recovered.toString()
            activeAll.text = item.activePatient.toString()
            criticalAll.text = item.critical.toString()
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
        val view: View = LayoutInflater.from(parent.context).inflate(R.layout.country_row,parent,false)
        return RecyclerViewHolder(view)
    }

    override fun getItemCount(): Int {
        return countryDataList.size
    }

    override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
        holder.bindData(countryDataList,position)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...