保存和访问Android活动中的静态变量

时间:2016-10-13 12:14:10

标签: java android

我们正在构建一个应用程序atm,您可以在其中更改游戏规则并从主要活动开始游戏

看起来像这样:

MainMenu - RuleList -RuleEdit(规则管理)           - PlayerActiivty - DrawCard(游戏)

我们还在GameLogic类中创建了一个带有静态数组的卡片,其中13个卡片类型都按照规则保存。

因此,当我们更改我们正在呼叫的卡的规则时     GameLogic.setRuleNumber(int pos,int ruleNumber)// pos是cardArray中卡片的位置

问题是: 当我们创建卡片并开始游戏时,卡片会在GameLogic中创建并保存,如果您现在进入游戏,您可以浏览所有卡片。 但是如果你回去选择MainMenu(它会改变它),cardArray突然变空了,当你再次进入游戏时它是空的,但仍然可以访问,所以不是空的。

GameLogic卡

public class GameLogic { 
     public final static List<ICard> cards = new ArrayList<>();

     public void createCards() {
         DatabaseConnector dbc = new DatabaseConnector(context);
         int rankLength = ICard.Rank.values().length;
         int suitLength = ICard.Suit.values().length;
         int ruleNumber;
         ArrayList<IRule> rules = dbc.getAllRules();
         int a = 0;
         for (int i = 0; i < rankLength; i++) {
           for (int j = 0; j < suitLength; j++) {
             ruleNumber = rules.get(i).getRuleNumber();
             cards.add((suitLength * i + j), new Card(ICard.Rank.values()[i], ICard.Suit.values()[j], ruleNumber));
        }
    }
}

` 创建卡片发生在菜单中:

//Main Menu Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main_menu);
   BackgroundMusic.setBackgroundMusic(this);
   GameLogic gameLogic = new GameLogic(this); //Creating the GameLogic we want to work with
   gameLogic.createCards(); //Creating the cards
}

DrawCard活动:

//DrawCard
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_draw_card);

    dbc = new DatabaseConnector(this);

    //init deck
    initDeck();

    //init playerlist
    playerList = CreatePlayer.playerList;
    playerNameText = (TextView) findViewById(R.id.activePlayerName);
    setPlayerName();

    //init rule
    ruleList = dbc.getAllRules();
}

public void initDeck() {
    GameLogic.shuffleDeck(GameLogic.getCards());
    cardStack = GameLogic.getCardStack();
}

不同活动之间发生了什么? 问题是,在卡片中保存了值,因此我们通过Intent我们必须提供5个不同的数组。我们认为这不是一个合适的解决方案。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

我强烈建议this库以持久的方式存储数据。

示例键值对写:

Paper.book().write("key", value);

示例读取:

Object value = Paper.book().read("key");