簡體   English   中英

Java,Android和SharedPreferences和OOP

[英]Java & Android & SharedPreferences & OOP

該函數包含在主活動中:

public int checkScore(int scoreCurrent) {
         int maxscore = PreferenceConnector.readInteger(this, "maxscore", 0);
         if (scoreCurrent > maxscore) {
          PreferenceConnector.writeInteger(this, "maxscore",
                         scoreCurrent);
          maxscore = scoreCurrent;
         }
         return maxscore;
        }

PreferenceConnector類簡化了SharedPreferences的工作。 函數checkScore()應該在其他類中可用,因此需要進行靜態處理。 但是我有錯誤:

Cannot use this in a static context

怎么辦以及如何解決?

活動:

public class GameScreen extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }

    public static int checkScore(int scoreCurrent) {
        int maxscore = PreferenceConnector.readInteger(GameScreen.this,
                "maxscore", 0);
        if (scoreCurrent > maxscore) {
            PreferenceConnector.writeInteger(GameScreen.this,
                    "maxscore", scoreCurrent);
            maxscore = scoreCurrent;
        }
        return maxscore;
    }
}

您必須將ACTIVITY的上下文傳遞給PreferenceConnector類

並且您必須創建類PreferenceConnector的對象,這時您可以將Activity的Context傳遞給該類。

並且不要使方法writeInteger(this,“ maxscore”,scoreCurrent); 靜態的

通過在您的主活動中創建PreferenceConnector類的對象來使用它。

試試下面的代碼:

public int checkScore(int scoreCurrent) {
         int maxscore = PreferenceConnector.readInteger(YourActivityName.this, "maxscore", 0);
         if (scoreCurrent > maxscore) {
          PreferenceConnector.writeInteger(YourActivityName.this, "maxscore",
                         scoreCurrent);
          maxscore = scoreCurrent;
         }
         return maxscore;
        }

(要么)

public int checkScore(int scoreCurrent) {
             int maxscore = PreferenceConnector.readInteger(getApplicationContext(), "maxscore", 0);
             if (scoreCurrent > maxscore) {
              PreferenceConnector.writeInteger(getApplicationContext(), "maxscore",
                             scoreCurrent);
              maxscore = scoreCurrent;
             }
             return maxscore;
            }

您可以將對GameScreen活動的引用傳遞給其他類。 然后,您不需要任何東西都是靜態的。 您可以只調用myGameScreen.checkScore()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM