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

How to call methods in onCreate (when the app starts)

我 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();

但是我得到一个错误: (View) in MainActivity 无法应用于 ()

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

更新: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));

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

如果你定义一个方法public void loadGame(View view) 那么你需要这样称呼它 loadGame(view)

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

快速修复:

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

更新:

你可以替换方法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));
      }

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