为什么即使在 API 上共享数据,我的回收器视图中也没有任何内容?

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

我正在尝试使用 GET 方法从本地获取数据。这是服务代码。

这是API接口

interface API {
    @GET("WeatherForeCast")
    fun getweather(): Single<List<Data>>
}

这是 API 的 APIService 类:

class APIService {
    private val BASE_URL="http://localhost:5000/"
    private val api=Retrofit.Builder().baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
        .build()
        .create(API::class.java)

    fun getData(): Single<List<Data>> {
        return api.getweather()
    }

}

在这里查看模型:

class APIViewModel: ViewModel() {

    val data = MutableLiveData<List<Data>>()
    val error = MutableLiveData<Boolean>()
    val loading= MutableLiveData<Boolean>()

    private val apiService=APIService()
    private val disposable=CompositeDisposable()

    fun refreshdata(){
        getfrominternet()
    }

    private fun getfrominternet(){
        loading.value=true
        disposable.add(
            apiService.getData().subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(object :DisposableSingleObserver<List<Data>>(){
                    override fun onSuccess(t: List<Data>) {
                        data.value=t
                        error.value=false
                        loading.value=false

                    }

                    override fun onError(e: Throwable) {
                        error.value=true
                        loading.value=true
                    }

                })

        )
    }


}

这是我制作所有内容的 ActivityMain.kt 文件。

class MainActivity : AppCompatActivity() {

    private lateinit var recyclerview: RecyclerView
    private lateinit var list: List<Data>
    private lateinit var binding: ActivityMainBinding
    private lateinit var adapter: RecyclerviewAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding= ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.recyclerview.setHasFixedSize(true)
        list= listOf()
        adapter=RecyclerviewAdapter(list)
        binding.recyclerview.adapter= adapter
        binding.recyclerview.layoutManager=LinearLayoutManager(this)

    }

}

我期待在模拟器的屏幕上看到我共享的数据。但我什么也没看见。也没有任何bug。我可以做什么来解决这个问题?

kotlin mvvm android-recyclerview retrofit rx-java
1个回答
0
投票
list= listOf()
adapter=RecyclerviewAdapter(list)

您在此处向适配器传递一个空列表。我建议将 viewModel 传递给适配器,然后观察 mutableLiveData,以便在它更新时将项目添加到适配器并通知它更改。

© www.soinside.com 2019 - 2024. All rights reserved.