Android体系结构组件:ViewModel在配置更改时返回null

我正在使用pixabay api在kotlin上开发一个图库应用程序,实现Android Architecture组件和改进以与服务器进行交互。 该应用程序工作正常,但是当我改变配置视图模型返回null! 问题是什么 ?

interface PhotoApi { @GET(context.getString(R.string.api_key)) fun getPhotos(): Call } 

改造设置

 object PhotoRetriever { val BASE_URL = "https://pixabay.com/api/" val service: PhotoApi init { val retrofit = Retrofit.Builder().baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()).build() service = retrofit.create(PhotoApi::class.java) } } 

 class MainActivity : AppCompatActivity() { //var photoList: List? = null lateinit var viewModel: MainActivityViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewModel = ViewModelProviders.of(this@MainActivity).get(MainActivityViewModel::class.java) viewModel.getList().observe(this, object :Observer<List> { override fun onChanged(t: List?) { textview.setText(t?.get(1)?.webFormatUrl) } }) 

视图模型类

 class MainActivityViewModel : ViewModel() { private val repository: Repository lateinit var photoList: LiveData<List> val itemsListObservable: MediatorLiveData<List> init { repository = Repository() itemsListObservable = MediatorLiveData() } fun getList(): LiveData<List> { photoList = repository.getNetworkData() Log.i("RECEIVED","size is ${photoList.value?.size} from viewModel ") return photoList } } 

Repository类

 class Repository { val photoApi: PhotoApi var photoList: List? val retlist = MutableLiveData<List>() init { photoApi = PhotoRetriever.service photoList = ArrayList() } fun getItemsListFromWeb() { photoApi.getPhotos().enqueue(object : Callback { override fun onFailure(call: Call?, t: Throwable?) { // Log.i("RECEIVED","${t?.message} from repository ") // retlist.value = null } override fun onResponse(call: Call?, response: Response?) { if (response!!.isSuccessful) { retlist.value = response.body()?.hits } else { retlist.value = null } Log.i("RECEIVED", "size is ${retlist.value?.size} from repository ") } }) } fun getNetworkData(): LiveData<List> { getItemsListFromWeb() return retlist } } 

我已经解决了这个问题,问题是在改进onResponse回调方法我删除了其他块,一切工作正常

之前

  override fun onResponse(call: Call?, response: Response?) { if (response!!.isSuccessful) { retlist.value = response.body()?.hits } else { retlist.value = null } Log.i("RECEIVED", "size is ${retlist.value?.size} from repository ") } 

  override fun onResponse(call: Call?, response: Response?) { if (response!!.isSuccessful) { retlist.value = response.body()?.hits } Log.i("RECEIVED", "size is ${retlist.value?.size} from repository ") }