0

私の目的は、ユーザーがボタンをクリックしたときに EditText に入力されたフィールドを保存することです。この場合は IP アドレスです。アイデアは、保存された検索と同様に、ユーザーが EditText に焦点を合わせたときに、入力されたすべての有効な IP のリストを表示することです。

この便利なコードを見つけました。私はそれを説明するのに少し助けが必要です。このコードは、EditText でString[] array送信されたすべてのフィールドのコレクションであると思われるすべての要素の putString を実行します。一度に 1 つのフィールドしか追加されない場合、この配列を作成するにはどうすればよいですか? 以下で何が起こっているのか説明が必要です。

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

EditTextすべての値を 1 つの String[] 配列またはList<String>またはに収集したら、Set<String>; 各配列値を個別のキーと値のペアとして SharedPreferences に保存する必要はありません。Set<String>1 つのキーの下にすべての値を作成して保存する、はるかに簡単な保存方法があります。

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: 同様に、文字列配列の各値は、一意のキーと配列のサイズで個別に保存されます。同様に、後で各項目が 0 から までの範囲で移動してsaved size of the array取得され、最初に から取得されます。SharedPreferences

于 2013-08-09T17:13:54.723 に答える