如何在onCreate中调用方法(当应用程序启动时)

时间:2016-02-29 16:37:03

标签: java android android-studio methods oncreate

我有MainActivity.class有一些方法。 以下是我想在应用启动时调用的方法:

public void loadGame(View view) {
    SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);         
    cashView.setText("cash: " + String.valueOf(cash));
    levelView.setText("level: " + String.valueOf(level));
}

所以我尝试在onCreate方法中输入以下内容:

loadGame();

但是我收到一个错误: 主要活动中的 (查看) 无法应用于()

对于这样一个愚蠢的问题很抱歉,但我不明白。 我认为onCreate和其他活动方法类似于Java中的main方法(但它们不是),但我仍然可以轻松地为Button onClick分配方法。为什么我不能在应用程序启动时调用方法?任何解决方案?

upd:MainActivity代码:

public class MainActivity extends AppCompatActivity {
    private int cash = 1000;
    private int level = 1;
    private TextView cashView;
    private TextView levelView;

    public static final String PREFS = "MySavedGameFile";

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

     //the compiler says it cannot resolve symbol 'view'
     //  loadGame(view);
     //I need to call the method anyway
        cashView = (TextView) findViewById(R.id.cashView);
        levelView = (TextView) findViewById(R.id.levelView);

    }
     public void loadGame(View view) {
        SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
        cash = loadGame.getInt("savedCash", 1000);
        level = loadGame.getInt("savedLevel", 1);
        cashView.setText("Cash: " + String.valueOf(cash));
        levelView.setText("Level: " + String.valueOf(level));

2 个答案:

答案 0 :(得分:1)

您的代码的问题是您正在定义一个带签名的方法,但使用另一个方法来调用它。

如果您定义方法public void loadGame(View view) 然后你需要像loadGame(view)

一样调用它

如果你做loadGame();这样的事情,那么编译器就会疯狂,因为他找不到那个方法(没有参数的方法......)

的QuickFix:

replace将视图(无论是什么)添加到方法调用

更新

你可以替换方法public void loadGame(View view) { 对于这个public void loadGame( ) {,因为你没有在该方法中使用任何视图,并且在oncreate中没有视图(除了控件cashView和levelView,但那些是Activity字段...)声明。

您的最终代码应如下所示:

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

        cashView = (TextView) findViewById(R.id.cashView);
        levelView = (TextView) findViewById(R.id.levelView);
        loadGame( );

    }
     public void loadGame() {
        SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
        cash = loadGame.getInt("savedCash", 1000);
        level = loadGame.getInt("savedLevel", 1);
        cashView.setText("Cash: " + String.valueOf(cash));
        levelView.setText("Level: " + String.valueOf(level));
      }

答案 1 :(得分:0)

您需要将View对象作为参数传递给loadGame()方法。考虑到您不在方法中使用view,而是可以将其作为参数删除,或者创建一个没有参数的同名新方法。