2016-10-02 6 views
1

これは私の店のアクティビティクラスのコードです。実行するたびにクラッシュしてしまいました。理由は分かりません。私はAndroidスタジオの初心者なので、アプリを作るために実験しています。私は店の活動を開くたびにクラッシュする

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

     } 
    } 
    } 
+0

http://stackoverflow.com/help/how-to-askをお読みください。 –

+0

http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

答えて

0

変更この行:

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はnullなので、設定するものはありません!したがって、nullポインタ例外がスローされ、アプリケーションがクラッシュします。

+0

mr sweeper :)ありがとうございました。しかし、別の質問があります。どのようにしてボタンbuy1を更新できますか?私のアプリを起動してもまだ更新されていないので表示されません – dazx15

+0

@ dazx15もちろん表示されません! 'onCreate'でボタンの可視性を' INVISIBLE'に設定しました! – Sweeper

+0

スコアが500に達すると私は目に見えないように設定したいので、スコア(最高)が500以上であれば、ボタンbuy1は私がしたいことをvisbleに更新します – dazx15

関連する問題