0

私はAndroidゲームを開発しています。View を拡張する Game クラスと Main Activity クラスがあります。

内部ストレージからハイスコアを読み込もうとしています。onCreate() でロードし、onDestroy() で保存したい。

Game game;
FileOutputStream fos;
FileInputStream fis;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    game = new Game(this);

    String collected = null;

    try {
        File file = getBaseContext().getFileStreamPath(Game.FILE_NAME);
        if(!file.exists()){
            file.createNewFile();
        }

        fis = openFileInput(Game.FILE_NAME);
        byte[] dataArray = new byte[fis.available()];
        while (fis.read(dataArray) != -1){
            collected = new String(dataArray);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    if(collected != null) game.setHighScore(Integer.parseInt(collected));
    else game.setHighScore(0);
    setContentView(game);
    }

protected void onDestroy() {
    super.onDestroy();

    try {
        fos = openFileOutput(Game.FILE_NAME, Context.MODE_PRIVATE);
        String data = "" + game.highScore;
        fos.write(data.getBytes());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}



}

DroidX でアプリをテストしています。ファイルを読み込もうとすると、起動時にクラッシュします。セクションをコメントアウトして読み取ると、アプリは正常に動作し、必要に応じてデータを書き込みます。データの保存中に再度実行すると、正しく読み込まれます。

ロードする前にファイルが存在するかどうかを確認するにはどうすればよいですか?

よろしくお願いします

4

1 に答える 1

0

SharedPreferencesを使用するように切り替えます。これは、このユースケース用に設計されています。

これがいかに簡単かを示す例を次に示します。

public class Example extends Activity {
    public static final String PREFS_NAME = "MyPrefsFile";

    @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       // Get highScore if it exists, otherwise default to zero
       int highScore = settings.getInt("highScore", 0);
       setHighScore(highScore);
    }

    @Override
    protected void onStop(){
       super.onStop();

      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putInt("highScore", mHighScore);

      // Commit the edits!
      editor.commit();
    }
}
于 2012-06-03T01:58:06.213 に答える