我正在尝试将位图列表存储到 List < Bitmap > 从 加载后>InputStream 使用以下代码。
URL url = new URL(img_url);
InputStream inputStream = url.openConnection().getInputStream();
if (inputStream != null) {
trailerPicBitmaps.add(BitmapFactory.decodeStream(inputStream));
}
所以,现在在使用 AsyncTaskLoader 加载所有图像后,我将其保存在 List < Bitmap < strong>> 位图列表。如何保存它以便保存配置更改。我使用了 onSaveInstanceState 但是当我导航到另一个应用程序时该应用程序崩溃了。
有没有办法使用 ViewModel 来做到这一点?
最佳答案
好的,所以你可以这样做:
首先是保存位图的地方 (viewModel)。
private val bitmapStore = MutableLiveData<List<Bitmap>>()
现在要获取它,您应该使用 (viewModel):
fun getBitmaps() = bitmapStore
在 onActivityCreated
的 fragment 中,例如setupUi
放置您的可观察对象:
viewModel.getBitmaps().observe(this, Observer {
//show bitmaps somewhere
})
并将位图放置在您的 MutableLiveData (viewModel) 中:
fun updateBitmaps(bitmaps:List<Bitmap>){
bitmapStore.postValue(bitmaps)
}
如果放置后会有一些编辑(应该在将数据存储到 MutableLiveData 之前更改数据),您应该考虑使用 Transformations.switchMap
更新
从服务器接收数据的示例(如果您想将其存储在数据库中,您应该检查空间和存储库模式)。
fun fetchBitmaps(){
apiServices.fetchBitmaps()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
updateBitmaps(it)
}, { throwable ->
//on error
})
}
关于android - 如何使用 ViewModel 存储位图列表以便在生命周期变化中生存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51361311/