代码之家  ›  专栏  ›  技术社区  ›  birisininkodarsivi

为什么尽管API上共享了数据,但屏幕上却没有我的回收视图?

  •  0
  • birisininkodarsivi  · 技术社区  · 2 年前

    我正在尝试使用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()
        }
    
    }
    

    此处为V°EWMODEL:

    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)
    
        }
    
    }
    

    我希望在模拟器的屏幕上看到我共享的数据。但我什么也没看见。也没有任何错误。我能做些什么来解决这个问题?

    1 回复  |  直到 2 年前
        1
  •  0
  •   ryankuck    2 年前
    list= listOf()
    adapter=RecyclerviewAdapter(list)
    

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

        2
  •  0
  •   Sep    2 年前

    在您的viewModel中创建一个liveData,并观察活动中的数据,当您从服务器收到响应时,通知数据。 当您获得数据时,活动中的观察者将被调用,也就是说,您应该将添加数据放入适配器并调用 notifyDataSetChanged() 方法

    示例:

    在视图中模型:

    private val _data = MutableLiveData<List<Data>>()
        val data: LiveData<List<Data>> get() = _summaryBehavior
    
    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
                        }
    
                    })
    
            )
        }
    

    在你的活动或片段中:

    with(viewModel){
                data.observe(viewLifecycleOwner) {
                    adapter.setData(it)
                    adapter.notifyDataSetChanged()
    
            }