Я хочу хранить некоторые базовые данные, такие как players_name, levels_completed, fastest_speed, fastest_time и каждый раз поднимать его каждый раз, когда игрок начинает глупую маленькую игру, которую я делаю … что является предпочтительным методом для этого?
Sharedprefs или внутреннее хранилище?
Я нахожусь в http://developer.android.com/guide/topics/data/data-storage.html и только что запутался в отношении того, что использовать, поскольку оба выглядят хорошо и достаточно легко.
Консультировать?
Благодаря!
Это в значительной степени взято из одного из примеров sdks в Facebook (это позволяет вам сохранять сессию 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);
Чтобы сохранить сеанс и т. Д. Надеюсь, это даст хороший смысл в том, как его использовать … Также имейте в виду, что я андроид newb – это отлично работает для меня, но я не эксперт: D
Если это статические данные игры, вы можете использовать общие настройки. Если это динамические данные, такие как высокие оценки игроков и т. Д., Я бы использовал базу данных 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"); } }