Как я могу добавить несколько записей в общий файл настроек

Не могли бы вы рассказать мне, как я могу использовать общие настройки для записи нескольких записей в общий файл настроек. Например, если я хочу добавить несколько имен в общий файл настроек, я использую следующий код, но каждый раз, когда я нажимаю кнопку отправки, он переопределяет предыдущая запись.

public void onClick(View v) 
{           
    SharedPreferences settings = getSharedPreferences("users", 0);
    SharedPreferences.Editor editorUser = settings.edit();
    editorUser.putString("user", editUser.getText().toString());
    editorUser.commit();
}

person birring    schedule 16.09.2013    source источник
comment
Вы можете сохранить только одно значение, связанное с определенным ключом.   -  person Spring Breaker    schedule 16.09.2013
comment
как мы можем сохранить более одного?   -  person birring    schedule 16.09.2013
comment
Ну, идея проста. Используйте другой ключ, чтобы сохранить другое значение.   -  person Spring Breaker    schedule 16.09.2013
comment
Вы используете тот же EditText для сохранения самого пользователя?   -  person Spring Breaker    schedule 16.09.2013
comment
да, я использую такой же   -  person birring    schedule 16.09.2013
comment
почему вы не пытаетесь создать несколько файлов в общей папке, чтобы сохранить данные нескольких пользователей   -  person Developer    schedule 16.09.2013
comment
я разрешаю пользователям регистрироваться, когда они вводят свое имя и нажимают кнопку, они регистрируются, а затем могут войти в систему   -  person birring    schedule 16.09.2013


Ответы (3)


Вы должны использовать разные ключи, например:

            SharedPreferences settings = getSharedPreferences("users", 0);

            SharedPreferences.Editor editorUser = settings.edit();
            for (int i = 0; i < users.size(); i++) 
                 editorUser.putString("user" + i, users.get(i));

            editorUser.commit();
person Szymon    schedule 16.09.2013
comment
что если у меня есть n пользователей - person birring; 16.09.2013
comment
это может вызвать проблемы, так как sharedPref сохраняет его постоянным, и нет проверки, существует ли уже пользователь. - person bofredo; 16.09.2013
comment
Ответ Szymom правильный, если вы используете общие настройки для сохранения данных. Попробуйте использовать БД, это еще один способ хранить данные и проверить, существует ли уже пользователь или нет. - person Kalai.G; 16.09.2013
comment
Общие настройки предназначены для хранения простых вещей без особых сложностей. Кроме того, вопрос был не в том, чтобы не перезаписывать один и тот же ключ (по крайней мере, я так понял). - person Szymon; 16.09.2013
comment
Я новичок в Android. Не могли бы вы сообщить мне, как использовать разные ключи для хранения значений. Кто-нибудь, плз. - person birring; 16.09.2013

Вы столкнулись с этой проблемой переопределения, потому что каждый раз используете одну и ту же общую настройку key для сохранения файла value. Предполагая, что вы используете один и тот же EditText для нескольких записей, я думаю, следующий фрагмент поможет вам.

counter=0;
        save.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                  settings = getSharedPreferences("users", 0);
                    SharedPreferences.Editor editorUser = settings.edit();
                    editorUser.putString("user"+counter, Edittext.getText().toString());
                    editorUser.commit();
                    counter++;
                    Edittext.setText("");
            }
        });
        show.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {


                for(int i=0;i<counter;i++)
                {
                    Log.i("User "+i, ""+settings.getString("user"+i, ""));
                }
            }
        });

Здесь я использовал кнопку show OnClickListner только для проверки нескольких записей через EditText. Но здесь я хотел бы предложить вам использовать базу данных SQLite, если вы действительно хотите хранить информацию о нескольких пользователях.

person Spring Breaker    schedule 16.09.2013

Вот как вы можете это сделать

Пройдите через эти 2 URL, это поможет вам

vogella.

mobile.tutsplus.com

Сохранить

 public void saveInformation(String username,String password) {
        SharedPreferences shared = getSharedPreferences("shared", MODE_PRIVATE);
        SharedPreferences.Editor editor = shared.edit();
        editor.putString("username", username);
        editor.putString("password", password);
        editor.commit();
    }

Загрузить

private void LoadPreferences(){
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    String username = sharedPreferences.getString("username", "");
    String password = sharedPreferences.getString("password", "");

   }

Изменить

 private void editDate(){
    SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
    editor.putString("username", mSaved.getText().toString());
    editor.putInt("selection-start", mSaved.getSelectionStart());
    editor.putInt("selection-end", mSaved.getSelectionEnd());
    editor.commit();
   }

Чтобы сохранить данные нескольких пользователей, вам будет предложено создать несколько файлов для каждого пользователя, а затем сохранить их в общей папке.

Просто просмотрите разницу между getDefaultSharedPreferences и getSharedPreferences отсюда Различная ссылка

person Developer    schedule 16.09.2013
comment
спасибо за ответ Гаурав, но я его не понимаю, похоже, что один и тот же код написан по-разному. - person birring; 16.09.2013
comment
это функция, просто передайте параметр этой функции и добавьте все, как я сделал для имени пользователя и пароля. и вызовите его оттуда, где вы хотите сохранить данные - person Developer; 16.09.2013
comment
@user2783369 user2783369 смотри, я обновил свой ответ, если тебе нужна помощь, дай мне знать - person Developer; 16.09.2013
comment
я пытаюсь использовать этот код, но он не работает для меня Гаурав :( - person birring; 16.09.2013
comment
что на самом деле вам нужно, чтобы сохранить данные нескольких пользователей в общей папке, я обновляю свой ответ, уверен, что это поможет вам - person Developer; 16.09.2013
comment
как это может спасти разных пользователей и их пароли? вам нужен какой-то список, чтобы добиться этого здесь. - person bofredo; 16.09.2013