Поиск оптимального способа избежать перезаписи значения ключа в общих настройках - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь создать приложение, которое сохраняет имя пользователя и номер контакта с помощью общих настроек.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь добавить в нее новую запись, предыдущая перезаписывается, и я застреваю, когда чувствую, как справиться с этой проблемой.Я пробовал 2-3 решения, найденные на Stack Overflow, и ни одно из них не помогло.Пожалуйста, избегайте комментированного кода, так как я пытаюсь сделать еще больше.

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

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.insert_button:
            String NAME = name.getText().toString();
         //   String CITY = city.getText().toString();
           // String EMAIL = email.getText().toString();
            String CONTACT = contact.getText().toString();

            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(nameKey , NAME);
           // editor.putString(emailKey, EMAIL);
           // editor.putString(cityKey, CITY);
            editor.putString(contactKey, CONTACT);
            editor.commit();
            Toast.makeText(this, "Data Inserted Successfully", Toast.LENGTH_SHORT).show();
            Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(500);
            name.setText("");
           // email.setText("");
           // city.setText("");
            contact.setText("");


            break;


        case R.id.view_button:

            sharedPreferences = getSharedPreferences(mainKey, MODE_PRIVATE);
            if (sharedPreferences.contains(nameKey)) {
                name.setText(sharedPreferences.getString(nameKey, "Default Name"));
            }
             /*
            if (sharedPreferences.contains(emailKey)) {
                email.setText(sharedPreferences.getString(emailKey, "Default Email"));
            }
            if (sharedPreferences.contains(cityKey)) {
                city.setText(sharedPreferences.getString(cityKey, "Default City"));
            }  */
            if (sharedPreferences.contains(contactKey)) {
                contact.setText(sharedPreferences.getString(contactKey, "Default Contact"));
            }

            break;

        case R.id.home_button:

            Intent intent = new Intent(getApplicationContext(), Home_Activity.class);
            startActivity(intent);
            finish();

            break;


    }

}

И яЯ обращаюсь к нему в другой деятельности.

    public void onClick(View view) {
            sharedPreferences = getSharedPreferences(mainKey, MODE_PRIVATE);
            if (sharedPreferences.contains(nameKey)) {
                name_tv.setText(sharedPreferences.getString(nameKey, "Default Name"));

            }
           /*
            if (sharedPreferences.contains(emailKey)) {
                email_tv.setText(sharedPreferences.getString(emailKey, "Default Email"));
            }
            if (sharedPreferences.contains(cityKey)) {
                city_tv.setText(sharedPreferences.getString(cityKey, "Default City"));
            }*/
            if (sharedPreferences.contains(contactKey)) {
                contact_tv.setText(sharedPreferences.getString(contactKey, "Default Contact"));

            }
            Toast.makeText(Home_Activity.this, "Recent Value Shown..!!", Toast.LENGTH_SHORT).show();
        }
    });

Теперь мне нужно зациклить новые вставленные данные в name_tv и contact_tv, но данные перезаписываются.Можете ли вы, ребята, помочь ..?Пожалуйста, предложите мне оптимальный способ .. !!

1 Ответ

0 голосов
/ 26 декабря 2018

Вы можете использовать SharedPreferences putStringSet / getStringSet, чтобы объединить одну пару имя + контакт и объединить их в одну строку с некоторым разделителем.

ADDING:

String nameAndContact = MAME + "|" + CONTACT; // you need to filter out your divider from the original strings
Set<String> info = sharedPreferences.getStringSet("info", new HashSet<String>());
info.add(nameAndContact);
sharedPreferences.edit().putStringSet("info" , info).apply();

READING:

Set<String> info = sharedPreferences.getStringSet("info", new HashSet<String>());
for (String nameAndContact : info) {
    String[] parts = info.split("|");
    Log.i("pair: name=" + parts[0] + ", contact=" + parts[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...