如何在共享首选项中使用模型类保存数组列表?

时间:2019-09-27 06:03:27

标签: android sharedpreferences

private ArrayList<PhotoInfo> imagelist;


imagelist = new ArrayList<>();

imagelist = response.body().getPhotos();

我必须以共享的首选项保存图像

并从Arraylist中检索

3 个答案:

答案 0 :(得分:2)

嘿,我为保存和获取任何自定义模型的ArrayList到SharedPreferences中提供了这种简单方法。

为此需要Gson依赖项:

implementation 'com.google.code.gson:gson:2.8.5'

将所有自定义列表保存到SharedPreferences

public void saveMyPhotos(ArrayList<PhotoInfo> imagelist ) {
    SharedPreferences  prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    try {
        Gson gson = new Gson();
        String json = gson.toJson(imagelist);
        editor.putString("MyPhotos", json);
        editor.commit();     // This line is IMPORTANT !!!
    } catch (Exception e) {
        e.printStackTrace();
    }
}

SharedPreferences获取所有保存的照片:

private ArrayList<PhotoInfo> getAllSavedMyPhotos() {
    SharedPreferences  prefs = PreferenceManager.getDefaultSharedPreferences(this);    
    Gson gson = new Gson();
    String json = prefs.getString("MyPhotos", null);
    Type type = new TypeToken<ArrayList<PhotoInfo>>() {}.getType();
    return gson.fromJson(json, type);
}

答案 1 :(得分:0)

您可以使用gson库将字符串列表转换为字符串,然后在下面存储和获取SharedPreferences代码

在gradle依赖项中添加

api 'com.google.code.gson:gson:2.8.5'

将您的列表转换为字符串并存储在SharedPreferences中

public static boolean writePhotoInfoJSON(List<PhotoInfo> sb, Context context)
{
    try {
        SharedPreferences mSettings = 
context.getSharedPreferences("yourSharedPreNme", Context.MODE_PRIVATE);

        String writeValue = new GsonBuilder()
                .registerTypeAdapter(Uri.class, new UriSerializer())
                .create()
                .toJson(sb, new TypeToken<ArrayList<PhotoInfo>>() 
 {}.getType());
        SharedPreferences.Editor mEditor = mSettings.edit();
        mEditor.putString("shringName", writeValue);
        mEditor.apply();
        return true;
    } catch(Exception e)
    {
        return false;
    }
  }

获取您的自定义数组列表

 public static ArrayList<PhotoInfo> readPhotoInfoJSON(Context context)
{
    if(context==null){
        return new ArrayList<>();
    }
    try{
        SharedPreferences mSettings = 
context.getSharedPreferences("yourSharedPreNme", Context.MODE_PRIVATE);

        String loadValue = mSettings.getString("shringName", "");
        Type listType = new TypeToken<ArrayList<PhotoInfo>>(){}.getType();
        return new GsonBuilder()
                .registerTypeAdapter(Uri.class, new UriDeserializer())
                .create()
                .fromJson(loadValue, listType);
    }catch (Exception e){
        e.printStackTrace();
    }
    return new ArrayList<>();
}





public static class UriDeserializer implements JsonDeserializer<Uri> {
    @Override
    public Uri deserialize(final JsonElement src, final Type srcType,
                           final JsonDeserializationContext context) throws 
JsonParseException {
        return Uri.parse(src.toString().replace("\"", ""));
    }
}

public static class UriSerializer implements JsonSerializer<Uri> {
    public JsonElement serialize(Uri src, Type typeOfSrc, 
JsonSerializationContext context) {
        return new JsonPrimitive(src.toString());
    }
}

答案 2 :(得分:0)

首先,您需要在模型类中实现class test { a; b: string; } let sd = new test(); console.log(sd.b) 接口

接下来,在模块级别Serializable文件中添加implementation 'com.google.code.gson:gson:2.8.2'

然后,您可以通过以下方式将Arraylist保存到共享首选项/从共享首选项中检索:

build.gradle