我正在尝试使用 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。我可以做什么来解决这个问题?
list= listOf()
adapter=RecyclerviewAdapter(list)
您在此处向适配器传递一个空列表。我建议将 viewModel 传递给适配器,然后观察 mutableLiveData,以便在它更新时将项目添加到适配器并通知它更改。