【问题标题】:Every time I open my shop activity it crashes每次我打开商店活动时它都会崩溃
【发布时间】:2016-10-02 06:50:09
【问题描述】:

这是我在商店活动类中的代码,每次运行它都会崩溃,我不知道为什么。我只是 Android Studio 的初学者,所以我只是在尝试制作一个应用程序。

import android.app.Activity;
import andrstrong textoid.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;

import static com.example.dazx15.spaceevasion.R.*;

 public class ShopActivity extends Activity {
 final Button buy1 = (Button) findViewById(id.buy_1);

private int best = 0;
private int coin=0;


@Override
protected void onCreate(Bundle savedInstanceState) {

    buy1.setVisibility(View.INVISIBLE);
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(layout.activity_shop);



}
 //when you click the buy button
public void buySpaceship()
{
    coin=GamePanel.coin;
    if(coin<=500)
    {
        coin=coin - 500;
        buy1.setText("OWNED");
        buy1.setClickable(false);

    }
 }
 public void update() {
    best = GamePanel.best;
    GamePanel.coin=coin;

    //if the score is 500 above
    if (best <= 500) {
        buy1.setVisibility(View.VISIBLE);

      }
    }
  }

【问题讨论】:

标签: java android-studio-2.0


【解决方案1】:

改变这一行:

final Button buy1 = (Button) findViewById(id.buy_1);

final Button buy1;

你的onCreate 应该是这样的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(layout.activity_shop);
    buy1 = (Button)findViewById(id.buy_1);
    buy1.setVisibility(View.INVISIBLE);
}

你的应用因为这行而崩溃:

final Button buy1 = (Button) findViewById(id.buy_1);

你想初始化按钮吗?但是,该语句在创建活动的新实例时执行(我的意思是在调用构造函数时,而不是 onCreate)。那时,活动中的观点还没有布局!这导致findViewById 找不到视图,因此它返回null

现在在onCreate 中,您尝试将buy_1 的可见性设置为不可见。但是,由于buy_1 为空,因此无需设置!因此,会引发空指针异常并且您的应用程序崩溃了。

【讨论】:

  • 谢谢扫地先生 :) 但我还有另一个问题,我该如何更新按钮 buy1,因为当我运行我的应用程序时它没有更新,仍然不可见
  • @dazx15 当然不可见!您在onCreate 中将按钮的可见性设置为INVISIBLE
  • 我设置了不可见,因为我想在分数达到 500 时将其设置为可见,所以如果我的分数(最佳)等于或大于 500,按钮 buy1 更新为可见,这就是我想要做的
  • @dazx15 然后在onCreate 中调用update()。此外,update 中的条件不正确。你应该使用&gt;= 而不是&lt;=
猜你喜欢
  • 1970-01-01
  • 2015-12-29
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
相关资源
最近更新 更多