首页 > 解决方案 > 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

标签: androidsharedpreferencesviewmodeltransformationflatbuffers

解决方案


推荐阅读