【问题标题】:How to Store Integer Arraylist in Shared Pref and retrieve the same in Android/Java?如何将 Integer Arraylist 存储在 Shared Pref 中并在 Android/Java 中检索它?
【发布时间】:2020-06-19 12:17:17
【问题描述】:

我尝试了很多建议: 我知道我们可以将字符串集存储在共享首选项中,但我有一个整数数组列表。现在,如果我尝试将 Integer Arralist 转换为 String arraylist 并存储在 Shared Pref 中,然后再次执行相同的操作,那么漫长的过程和很多异常。

还有其他方法吗?

确保我想使用共享首选项,没有其他东西:

代码:

public Set<String> getAppointmentStatusPosList() {
        return sharedPreferences.getStringSet(APPOINTMENT_STATUS_ID_LIST, null);
    }

    public void setAppointmentStatusPosList(Set<String> vitalId) {
        editor.putStringSet(APPOINTMENT_STATUS_ID_LIST, vitalId);
        editor.apply();
    }

 @Override
    public void selectedIndices(List<Integer> indices) {
        Set<Integer> set = new HashSet<>();
        set.addAll(indices);
        preferenceManager.setAppointmentStatusPosList(set);
       // list1 = indices;
    }

【问题讨论】:

  • 您可以使用 GSON 将其转换为字符串,然后将其保存在 SharedPref 中。稍后您可以将其解析回 ArrayList。
  • @ShaluTD 已经检查过了,我有这样的数组列表 List indices ,而不是 Interger[]
  • @AshutoshSagar 你能发布答案吗?

标签: java android gson


【解决方案1】:

将整数数组转换为字符串

List<Integer> listInteger = new ArrayList();
listInteger.add(1);
listInteger.add(2);
listInteger.add(3);

// Convert Integer array to String text 
String ss = new Gson().toJson(listInteger);

将字符串文本保存到SharedPreference

SharedPreferences prefs = context.getSharedPreferences("com.example.myapplication", Context.MODE_PRIVATE);
        prefs.edit().putString("APPOINTMENT_STATUS_ID_LIST_STRING", ss).apply();

SharedPreference获取字符串文本

String text = prefs.getString("APPOINTMENT_STATUS_ID_LIST_STRING", "");

将字符串文本转换为整数数组

// Convert string text to Integer array 
final Type type = new TypeToken<List<? extends Integer>>() {
}.getType();

listInteger = new Gson().fromJson(ss, type);

注意:- 您应该在您的应用程序Gradle 文件中添加以下依赖项。

dependencies {
  implementation "com.squareup.retrofit2:converter-gson:2.3.0"
}

【讨论】:

    【解决方案2】:

    试试这个...

        int[] list = new int[10];
        //below is test data, add your original data same like below
        for (int i = 0; i < list.length; i++) {
            list[i]=i;
        }
    
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < list.length; i++) {
            str.append(list[i]).append(",");
        }
    
        SharedPreferences.Editor editor=preferences.edit();
        editor.putString("string",str.toString());
        editor.commit();
    
    
    
        String savedString = preferences.getString("string", "");
        java.util.StringTokenizer st = new StringTokenizer(savedString, ",");
        int[] savedList = new int[10];
        for (int i = 0; i < 10; i++) {
            savedList[i] = Integer.parseInt(st.nextToken());
    
            Log.d("====","savedList :  "+savedList[i]);
        }
    

    或者检查这个库,它是存储任何共享首选项的方法 https://github.com/yehiahd/FastSave-Android

    【讨论】:

    • 我有这样的数组列表 List indices ,而不是 Interger[]
    • 没关系。只需使用 .get(i) 而不是 [i]。
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2012-01-19
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多