Android,共享偏好还是内部存储?

时间:2011-07-26 02:17:10

标签: android sharedpreferences data-storage

我想存储一些基本数据,比如players_name,levels_completed,faster_speed,faster_time,并在每次玩家开始制作一个愚蠢的小游戏时启动它......这是执行此操作的常用方法吗?

Sharedprefs或内部存储?

我在http://developer.android.com/guide/topics/data/data-storage.html 并且对于使用哪个看起来既好又容易做而感到困惑。

指教?

谢谢!

2 个答案:

答案 0 :(得分:6)

这几乎取自其中一个Facebook sdks示例(它允许您保存FB会话,因此用户不必每次都登录)...我会稍微为您修改一下< / p>

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 :(得分:1)

如果游戏数据是静态的,您可以使用共享偏好设置。如果它是像玩家高分等动态数据我会使用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");
    }
}