android - Android ViewModel 使用 Transformation.map 从 Sharedpreferences 转换数据
问题描述
我正在尝试学习现代 Android 开发。我有应用程序在单独的线程中从网络获取数据并将其作为字符串存储到 SharedPreferences 中。此数据是 flatbuffers 字节。现在我尝试使用这些数据为我的片段开发 ViewModel。
Android 架构组件对我来说是新的,并不是所有的东西都被我理解。你能确保我这段代码是正确的,如果是的话,我可以做得更好。如果不骂我,请告诉我正确的道路。
package com.lorkan.NetworkBypass.UI.technology;
import android.app.Application;
import android.arch.lifecycle.AndroidViewModel;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.Transformations;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import java.nio.ByteBuffer;
import com.lorkan.NetworkBypass.LiveData.SharedPreferenceStringLiveData;
public class TechnologyViewModel extends AndroidViewModel {
private SharedPreferences prefs;
private LiveData<TechnologyManagerFlatBuffer> techManagerFlatBuffer;
private LiveData<String> techManagerString;
public TechnologyViewModel(@NonNull Application application) {
super(application);
prefs = PreferenceManager.getDefaultSharedPreferences(application.getApplicationContext());
techManagerString = new SharedPreferenceStringLiveData(prefs,"TechnologyManagerFlatBuffer","");
techManagerFlatBuffer = Transformations.map(techManagerString, s ->{
ByteBuffer bb = ByteBuffer.wrap(s.getBytes());
return TechnologyManagerFlatBuffer.getRootTechnologyManagerFlatBuffer(bb);
});
}
public LiveData<TechnologyManagerFlatBuffer> getTechManagerFlatBuffer() {
return techManagerFlatBuffer;
}
}
TechnologyManagerFlatBuffer 当然是通过 flatbuffer 编译器生成的 flatbuffer 类,SharedPreferenceStringLiveData 类是从这个线程获取的 https://gist.github.com/idish/f46a8327da7f293f943a5bda31078c95#file-booleansharedpreferencelivedata-java-L10
解决方案
推荐阅读
- ios - 键盘导致 UICollectionView Cells 加载错误
- maven - Maven故障安全插件不执行测试
- c# - C#函数
与表达 > - ios - UITableView 单元格被重用/重复
- c++ - std::locale 向“en_US.UTF-8”语言环境抛出 runtime_error 异常
- php - Laravel 文件上传或移动带有特殊字符的问题
- oracle11g - 寻找两个日期之间差异时的正确答案格式
- java - 在 JAVA 中为很长的请求实现 SOAP 客户端的好习惯?
- matlab - 如何在 MATLAB 中将元胞数组扩展作为函数调用实现?
- python - 在我使用 dataset,concatenate 之后,dataset.map 只作用于原始数据