Android Kotlin:未连接适配器;跳过布局:RecyclerView

Android Kotlin:未连接适配器;跳过布局:RecyclerView,android,kotlin,retrofit,android-recyclerview,Android,Kotlin,Retrofit,Android Recyclerview,我正试图在我的kotlin代码中实现Recyclerview。。。。 我正在使用改造从webservice获取数据,并将其绘制到回收器视图中 MainActivity.class class MainActivity : AppCompatActivity() { internal lateinit var jsonApi:MyAPI private val compositeDisposable = CompositeDisposable() lateinit var recyclerVie

我正试图在我的kotlin代码中实现Recyclerview。。。。 我正在使用改造从webservice获取数据,并将其绘制到回收器视图中

MainActivity.class

class MainActivity : AppCompatActivity() {

internal lateinit var jsonApi:MyAPI
private val compositeDisposable = CompositeDisposable()
lateinit var recyclerView: RecyclerView


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    recyclerView = findViewById(R.id.recycler_drivers)

    // init API
    val retrofitt = RetrofitClient.instance
    if (retrofitt != null) {
        jsonApi = retrofitt.create(MyAPI::class.java)
    }

    //View
    recyclerView.setHasFixedSize(true)
    recyclerView.layoutManager = LinearLayoutManager(this)
    fetchData()

}

private fun fetchData() {
    compositeDisposable.add(jsonApi.drivers
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe{drivers->displayData(drivers)}
    )
}

private fun displayData(drivers: List<Driver>?) {
    val adapter = DriverAdapter(this,drivers!!)
    recycler_drivers.adapter = adapter
}
class DriverViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val txt_driver_number = itemView.txt_driver_number
    val txt_first_name = itemView.txt_first_name
    val txt_ph_number = itemView.txt_ph_number
}
这是API接口

interface MyAPI {
    @get:GET("data")
    val drivers:Observable<List<Driver>>
}
这是模型类,它基本上是来自本地主机服务器的数据

   class Driver {
        var driver_number: String = ""
        var first_name: String = ""
        var ph_number: Int = 0
    }
正如你所看到的,我已经为Recycleview连接了一个适配器。那么,为什么我总是犯这个错误呢


我已经阅读了与同一问题相关的其他问题,但没有任何帮助。

我认为您看到这个问题是因为通过改造查询web服务的异步性质。直到
onCreate
退出后,才实际分配
RecyclerView.Adapter


尝试将RecyclerView的可视性更改为
Gone
,直到适配器应用于
displayData
,然后将其设置为
Visible

displayData()中构建RecyclerView

您需要在适配器中公开一个方法来设置数据
setDrivers()

类驱动程序(内部变量上下文:上下文):
RecyclerView.Adapter()
{
val drivers=mutableListOf()
...
乐趣设置驱动程序(驱动程序:可变列表){
这个.drivers=drivers
notifyDataSetChanged()
}
}

这将摆脱您的
无适配器连接;跳过布局:RecyclerView
错误

您可能没有到达
.subscribe()
您实际连接适配器的位置,您可以在那里记录一些内容以确保您到达它吗?添加适配器后是否可以尝试连接布局管理器?@Rafa它没有到达
subscribe()
,你觉得我错过了什么朋友?@Rafa我需要分享更多的内容吗。。。比如说,
改造客户机
是的,请这样做,我认为这无关紧要。不需要在onCreate()中设置适配器。
object RetrofitClient {
    private var ourInstance : Retrofit? = null

    var instance: Retrofit? = null
        get(){
            if(ourInstance == null){
                ourInstance = Retrofit.Builder()
                    .baseUrl("http://localhost/BSProject/public/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build()
            }
            return ourInstance!!
        }
}
   class Driver {
        var driver_number: String = ""
        var first_name: String = ""
        var ph_number: Int = 0
    }
private fun displayData(drivers: MutableList<Driver>?) {
    recyclerView.setHasFixedSize(true)
    recyclerView.layoutManager = LinearLayoutManager(this)
    val adapter = DriverAdapter(this,drivers!!)
    recycler_drivers.adapter = adapter
} 
class MainActivity: {
   lateinit var driverAdapter: DriverAdapter

    protected void onCreate() {
       ...
       recyclerView = findViewById(R.id.recycler_drivers)
       recyclerView.setHasFixedSize(true)
       recyclerView.layoutManager = LinearLayoutManager(this)
       val adapter = DriverAdapter(this)
       recycler_drivers.adapter = adapter
    }

    private fun displayData(drivers: List<Driver>?) {
        driverAdapter.setDrivers(drivers)
    }
class DriverAdapter(internal  var contex:Context): 
RecyclerView.Adapter<DriverViewHolder>()
{
    val drivers = mutableListOf()
    ...

    fun setDrivers(drivers: MutableList<Driver>) {
        this.drivers = drivers
        notifyDataSetChanged()
    }
}