0

我的目标是在用户单击按钮时保存在 EditText 中输入的字段;在这种情况下,它是一个 IP 地址。这个想法是当用户关注 EditText 时显示所有有效输入 IP 的列表,类似于保存的搜索。

我发现了这段有用的代码。我需要一些帮助来解释它。代码运行所有元素的 putString String[] array,我认为它是 EditText 中所有提交字段的集合。如果一次只添加一个字段,如何创建此数组?我需要解释下面发生的事情。

public boolean saveArray(String[] array, String arrayName, Context mContext) {   
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    SharedPreferences.Editor editor = prefs.edit();  
    editor.putInt(arrayName +"_size", array.length);  
    for(int i = 0;i < array.length; i++){ 
        editor.putString(arrayName + "_" + i, array[i]);  
    }
    return editor.commit();
}

public String[] loadArray(String arrayName, Context mContext) {  
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(arrayName + "_size", 0);  
    array = new String[size];  
    for(int i=0;i<size;i++)  
        array[i] = prefs.getString(arrayName + "_" + i, null);  
    return array;  
}
4

2 回答 2

1

根据您的要求和您引用的代码,我得到以下想法:

未经测试的勘误表:

public boolean saveoneData(String oneTimeData, String key, Context mContext) {   
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0); 

    int size = prefs.getInt(key+"_size", 0); // For the first time it gives the default value(0)

    SharedPreferences.Editor editor = prefs.edit(); 

    editor.putString(key+ "_" + size, oneTimeData);   
    editor.putInt(key+"_size", ++size);  // Here everytime you add the data, the size increments.


    return editor.commit();
}

public String[] loadArray(String key, Context mContext) {  
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(key+ "_size", 0);  
    array = new String[size];  
    for(int i=0;i<size;i++)  
        array[i] = prefs.getString(key+ "_" + i, null);  
    return array;  
}

但我通常不使用sharedpreferences来存储大量数据,因为data creation, retrieval and data modifications随着数据的增加它会变得很困难。希望这是你想要的。

于 2013-08-09T17:00:42.203 回答
1

EditText一旦你在一个 String[] 数组中收集了所有值,List<String>或者Set<String>; 你不需要将每个数组值保存为 SharedPreferences 中的单独键值对。有一种更简单的保存方法,即Set<String>在一个键下创建并保存所有值:

editor.putStringSet(arrayName, new HashSet<String>(Arrays.asList(array));

对于检索,您可以Set<String>以相同的方式检索它们:

Set<String> ipsSet = sharedPrefs.getStringSet(arrayName, null);

What is happening in the code you posted: String 数组的每个值都单独保存在唯一键和数组大小下,同样。类似地,稍后检索每个项目,在 0 到 的范围内移动,saved size of the array从第一个位置检索SharedPreferences

于 2013-08-09T17:13:54.723 回答