Android, общие настройки или внутреннее хранилище? - PullRequest
3 голосов
/ 26 июля 2011

Я хочу сохранить некоторые базовые данные, такие как Players_name, levels_completed, fastest_speed, fastest_time, и выводить их каждый раз, когда игрок запускает маленькую глупую игру, которую я делаю ... какой метод для этого есть?

Sharedprefs или внутреннее хранилище?

Я нахожусь на http://developer.android.com/guide/topics/data/data-storage.html и только что запутались в том, что использовать, так как оба выглядят хорошо и достаточно просто.

Посоветуйте?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 26 июля 2011

Это в значительной степени взято из одного из примеров Facebook sdks (оно позволяет вам сохранять сеанс FB, чтобы пользователю не приходилось каждый раз входить в систему) ... хотя я немного изменю его для вас

public class SessionStore {

private static final String PLAYER_NAME = "player_name";
private static final String LEVELS_COMPLETED = "levels_completed";
private static final String HIGH_SCORE = "high_score";

private static final String KEY = "player_session";

int highScore;
int levelsCompleted;
String pName;

public static boolean saveSession(Context context, String player_name, int levels_completed, int high_score) {
    Editor editor =
        context.getSharedPreferences(KEY + player_name, Context.MODE_PRIVATE).edit();
    editor.putString(PLAYER_NAME,player_name);
    editor.putInt(LEVELS_COMPLETED, levels_completed);
    editor.putInt(HIGH_SCORE,high_score);

    return editor.commit();
}

public static void restoreSession(Context context, String player_name) {
    SharedPreferences savedSession =
        context.getSharedPreferences(KEY + player_name, Context.MODE_PRIVATE);
    highScore = savedSession.getInt(HIGH_SCORE,0);
    levelsCompleted = savedSession.getInt(LEVELS_COMPLETED,0);
    pName = savedSession.getString(PLAYER_NAME,"NO_NAME!");

}

public String getName()
{
      return pName;
}

}

Я думаю, вы поняли основную идею ...

некоторые моменты: я использую «KEY + player_name» в случае, если разные игроки играют на одном телефоне (если бы он был статичным, вы бы перезаписали данные одного игрока данными другого).

Кроме того, если вы делаете pName = savedSession.getString(PLAYER_NAME,"NO_NAME!");, если в общих настройках ничего не существует, по умолчанию используется значение "NO_NAME!" и аналогично для getInts (который в этом случае у меня по умолчанию их 0)

в программе вы могли бы сделать SessionStore.saveSession("Alex",50000,50000);, чтобы сохранить сеанс и т. Д. Надеюсь, что это дает хорошее представление о том, как его использовать ... Также имейте в виду, я новичок Android - это прекрасно работает для меня, но Я не эксперт: D

1 голос
/ 26 июля 2011

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

public void StoreTimeAppend(String MY_DATA, File file) {
    try {
        FileOutputStream fos = openFileOutput(String.valueOf(file), MODE_APPEND);
        Writer out = new OutputStreamWriter(fos, "UTF8");
        out.write(MY_DATA + '\n');
        out.close();
        fos.close();
    } catch (IOException e) {
        Tip.setText("ISSUE");
    }
} 
...