##実現したいこと
ボタンを押すことで、アロートダイアログが出現し、はいを押すことで、TextViewに表示される内容の変更、及び、資金を減らして、変更後の資金をTextViewに表示させたいです。
##エラーメッセージ・エラー動作等
以下のコードを記述したボタンをクリックするとアプリが強制終了してしまいます。
switch文とhi3の宣言を削除すると、現在の資金の更新がTextViewに反映されません。
誰か正しいプログラムを教えていただけますか?
##エラーログ
10-28 01:49:38.417 16892-16892/com.example.a1518.nagoya E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.a1518.nagoya, PID: 16892
java.lang.NullPointerException: Attempt to read from null array
at com.example.a1518.nagoya.higashiyama$2$1.onClick(higashiyama.java:61)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Logcatの赤字で表示されている部分を載せておきます。
##該当コード
final Button button_h2 = (Button) findViewById(R.id.Button_H2); button_h2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final int hi0 = globals.nc; if(hi0 < 200000){ new AlertDialog.Builder(higashiyama.this) .setTitle("工事のご案内") //タイトルの設定 .setMessage("延伸工事を行うには資金(NC)を200,000以上にしてください") //メッセージの設定 .setPositiveButton("了解しました", null) //ボタンの設定と押した後の動作なしの設定 .show(); //ダイアログを閉じる }else{ new AlertDialog.Builder(higashiyama.this) .setTitle("延伸工事の確認") //タイトルの設定 .setMessage("延伸工事を行いますか?") //メッセージの設定 .setPositiveButton("はい", new DialogInterface.OnClickListener() { //はいボタンを押したときの動作 @Override public void onClick(DialogInterface dialog, int which) { int hi1 = globals.nc; int hi2 = globals.Cash1; int hi3 = globals.Route1[1]; Button button_h2 = (Button) findViewById(R.id.Button_H2); TextView h12 = (TextView) findViewById(R.id.TextView_H12); TextView h14 = (TextView) findViewById(R.id.TextView_H14); hi3 = hi3 + 1; switch(hi3){ case 2: h14.setText("池下"); break; case 3: h14.setText("東山公園"); break; case 4: h14.setText("星ヶ丘"); break; case 5: h14.setText("藤ヶ丘"); break; case 6: h12.setText("中村公園"); break; case 7: h12.setText("高畑"); h14.setText("藤が丘"); button_h2.setVisibility(View.INVISIBLE); break; } hi1 = hi1 - hi2; globals.nc = hi1; globals.Route1[1] = hi3; TextView cash_h2 = (TextView)findViewById(R.id.Cash_H2);//部品の取得 final NumberFormat numberFormat = NumberFormat.getNumberInstance(); String set_text_h2 = numberFormat.format(globals.nc); cash_h2.setText(set_text_h2); //変数の中身を表示する } }) .setNegativeButton("キャンセル", null) .show(); } } });
##該当コードで実施しようとしていること
ボタンをクリックしたとき、現在の資金(変数nc)が200000あるか確認して足りない場合は、
アロートダイアログにて200000必要と教える。
200000以上の時は、アロートダイアログにて、工事を行うか確認する
キャンセルが押されたら、処理を行わずにアロートダイアログを終了する
はいが押されたら、
現在の資金(nc)をhi1にコピーする
工事代金(Cash1)をhi2にコピーする
hi3にRoute1[1]の中身をコピーする
hi3に1を足す
switch文を使用して処理を行う
処理内容は、TextViewの内容を変更する
一番最後のcaseでは、ボタンをロックする
現在の資金(hi1)から200000(hi2)を差し引く
現在の資金(nc)にhi1の内容をコピーする形で変更を反映させる
hi3の内容をRoute1[1]にコピーする形で変更を反映させる
変更後の現在の資金を桁区切り表示でtextViewに表示させる
以上です。
###Androidアプリの開発環境など
AndroidStudioのVersion:1.5
PCのOSWindows10
回答2件
あなたの回答
tips
プレビュー