在 recyclerView 中获取 api 数据时出错,错误显示为:E/RecyclerView: No adapter attached;跳过布局

问题描述 投票:0回答:0

应用程序从api获取电影数据并获取到片段的recyclerView。所以问题是我没有在 recyclerView 中获取数据。我看了一些 youtube 教程,但无法找到解决方案。

片段是

import android.os.Bundle
import android.util.Log
import android.util.Log.d
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.core.os.trace
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.movie_app.*
import com.example.movie_app.databinding.FragmentMovieBinding
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

const val  BASE_URL ="http://task.auditflo.in/"
class MovieFragment : Fragment() {

     lateinit var binding: FragmentMovieBinding
    lateinit var movieAdapter: MovieAdapter

//    override fun onCreate(savedInstanceState: Bundle?) {
//        super.onCreate(savedInstanceState)
//    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding= FragmentMovieBinding.inflate(inflater,container,false)
        binding.rv.setHasFixedSize(true)
        binding.rv.layoutManager=LinearLayoutManager(requireContext())
        getData()
        return binding.root
    }



  private  fun getData(){

val retrofitBuilder =Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(
    GsonConverterFactory.create()).build().create(ApiInterface::class.java)

      val retrofitData = retrofitBuilder.getData()

      retrofitData.enqueue(object : Callback<List<ResponceDataClass>?> {
          override fun onResponse(
              call: Call<List<ResponceDataClass>?>,
              response: Response<List<ResponceDataClass>?>
          ) {
              val responseBody = response.body()!!

              binding.rv.adapter=movieAdapter
              movieAdapter= MovieAdapter(requireContext(), responseBody)
              movieAdapter.notifyDataSetChanged()
          }

          override fun onFailure(call: Call<List<ResponceDataClass>?>, t: Throwable) {
              d("MovieFragment", "onFaliure: "+t.message)
          }
      })



  }
}

我也试过 binding.rv.adapter=movieAdapter 但它不工作 片段的适配器是

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.movie_app.databinding.FragmentMovieBinding
import com.example.movie_app.databinding.MovieItemBinding

class MovieAdapter (private val context: Context, private val movieList:List<ResponceDataClass> ): RecyclerView.Adapter<MovieAdapter.ViewHolder>() {
    class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {

        lateinit var binding: MovieItemBinding


        var movie_title:TextView
        var movie_release_year:TextView
        var movie_runtime:TextView
        var movie_cast:TextView

        init{
            movie_title=itemView.findViewById(R.id.movie_title)
            movie_release_year=itemView.findViewById(R.id.movie_release_year)
            movie_runtime=itemView.findViewById(R.id.movie_runtime)
            movie_cast=itemView.findViewById(R.id.movie_cast)
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var itemView = LayoutInflater.from(context).inflate(R.layout.movie_item,parent,false)

        return ViewHolder(itemView)
    }

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


        holder.movie_title.text=movieList[position].Title
        holder.movie_release_year.text=movieList[position].Year.toString()
        holder.movie_runtime.text=movieList[position].Runtime.toString()
        holder.movie_cast.text=movieList[position].Cast

    }

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


And the error I am getting is 
E/RecyclerView: No adapter attached; skipping layout


The app is running but no data is displaying on the recyclerView.
I think there is some mistake in the fragment or in adapter rest code is correct
I am unable to find the error kindly help me with this problem
kotlin android-recyclerview retrofit fragment adapter
© www.soinside.com 2019 - 2024. All rights reserved.