質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

2696閲覧

AndroidStudioの分岐処理

Yoshikun_0945

総合スコア224

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/10/28 01:42

編集2016/10/28 01:51

##実現したいこと
ボタンを押すことで、アロートダイアログが出現し、はいを押すことで、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/10/28 01:48

エラーログを掲載して下さい。強制終了時にLogcatに出ているはずです。
guest

回答2

0

java.lang.NullPointerException: Attempt to read from null array at com.example.a1518.nagoya.higashiyama$2$1.onClick(higashiyama.java:61)

61行目で、nullを配列として参照したためのエラーのようです。
正確な行数はわかりませんがおそらくここでしょうか?

java

1int hi3 = globals.Route1[1];

nullになっていないか確認してみて下さい。

投稿2016/10/28 01:54

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoshikun_0945

2016/10/28 01:55

ありがとうございました。
guest

0

ベストアンサー

配列を直接参照する場合はnullチェックをしたほうがいいです。

TextUtils.isEmpty(hoge[1]);

でチェックできます

投稿2016/10/28 09:41

shotakeu

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問