Строки не хранятся с использованием SharedPreferences - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь сохранить две строки в SharedPreferences. Когда я впервые запускаю приложение, они отображаются так, как должно. Когда я закрываю приложение и снова открываю приложение, строки больше не устанавливаются такими, какими они были до закрытия приложения, и используется значение строки по умолчанию. Почему это? Ниже приведены мои методы для сохранения и извлечения двух строк.

Вот две строки

Intent intent = getIntent();

    playerName1 = intent.getStringExtra("PLAYER_ONE");
    playerName2 = intent.getStringExtra("PLAYER_TWO");

Вот способ хранения строк

private void savePlayerNames()
{
    SharedPreferences sharedPreferences = getSharedPreferences("playerNames", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("playerOne", playerName1);
    editor.putString("playerTwo", playerName2);
    editor.commit();
}

Вот где они получены

private void displayPlayerNames(int current)
{
    SharedPreferences sharedPreferences = getSharedPreferences("playerNames", Context.MODE_PRIVATE);

    String playerOne = sharedPreferences.getString("playerOne","Player 1");
    String playerTwo = sharedPreferences.getString("playerTwo","Player 2");

    if(playerchoice[current].getText().toString().equals(""))
    {
        if (savedTracker % 2 == 0)
        {
            playerchoice[current].setText(x);
            playerNameDisplay.setText(playerTwo + "'s Go!");
            savedTracker++;
        }
     }
 }

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

используйте следующий класс, это поможет вам избавиться от всего запутанного кода

public class PlayersData {

private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
private static final String PLAYERS_DATA = "PLAYERS_DATA";
private static final String PLAYERS = "PLAYERS";

public PlayersData(Context context) {
    sharedPreferences = context.getSharedPreferences(PLAYERS_DATA, Context.MODE_PRIVATE);
    editor = sharedPreferences.edit();
}

public void savePlayers(Players players) {
    Gson gson = new Gson();
    String json = gson.toJson(players);
    editor.putString(PLAYERS, json);
    editor.commit();
}

public Players getPlayers() {
    Gson gson = new Gson();
    String json = sharedPreferences.getString(PLAYERS, null);
    return gson.fromJson(json, Players.class);
}

public class Players{

    private String one;
    private String two;

    public Players() {

    }

    public Players(String one, String two) {
        this.one = one;
        this.two = two;
    }

    public String getOne() {
        return one;
    }

    public void setOne(String one) {
        this.one = one;
    }

    public String getTwo() {
        return two;
    }

    public void setTwo(String two) {
        this.two = two;
    }
}

}

, чтобы получить / сохранить данные простым initlize классом и выполнить операции

PlayersData playersData = new PlayersData(this); //this is the context
1008 * надеюсь, что это поможет
implementation 'com.google.code.gson:gson:2.8.5'
0 голосов
/ 19 ноября 2018

Заменить

editor.commit();

на

editor.apply();

commit() записывает свои предпочтения в постоянное хранилище synchronously, которое может быть не выполнено по разным причинам.apply() немедленно записывает свои изменения в память SharedPreferences, но запускает asynchronous коммит на диск.

apply () полностью безопасен.Вы можете использовать его без беспокойства, поскольку вы получите обновленное значение настроек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...