android - 如何使用 ViewModel 存储位图列表以便在生命周期变化中生存?

标签 android bitmap viewmodel android-lifecycle android-viewmodel

我正在尝试将位图列表存储到 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/

相关文章:

c# - 如何在 WPF 中暂停绑定(bind)的 UI 更新?

android - 更改后退按钮的颜色(在 ActionBar 上)

java - 如何使用 EditText 和 RadioButtons(以及颜色集)顺利存储用户输入数据?

android - 检测以 Android 结尾的安装

android - 在 Canvas 上绘制和删除位图图标

java - ArrayAdapter<Bitmap> 帮助填充 GridView

model-view-controller - ASP.NET MVC : Nesting ViewModels within each other, 反模式与否?

java - 如何在 Android/Java 中以编程方式创建新的电子表格?

android - 如何将 Bitmap 转换为 Frame?

Android 架构组件 LiveData