2012年01月12日

割り勘アプリでAndroidアプリ開発を体験、その7 エラー処理


前回(その6)までで、合計支払額を人数で割り、ひとり当たりの負担額を表示する「割り勘アプリ」が完成しました。動作を確認しているとエラーが出る状況が見えてきました。

入力欄に数字を入れない場合と人数欄が0の場合にエラーが表示されるようです。

つまり、このエラーを解決するためには、数字が入ってない、あるいは人数が0の時にはダイアログで注意を促し、それ以外の場合には割り算の結果を表示させれば良さそうです。

エラーが起きる時点は、ボタンを押した段階でエラーが出るので、ボタンを押した後にコードを書けばよいことがわかります。

エラー処理はいろいろな方法がありますが、今回は次の条件によって処理を分けることを考えます。

エラーの生じる条件

合計支払額の数値が入力されてない。
人数の数値が入力されていない。
人数の数値が0(ゼロ)。

この3つの場合には、エラーの表示として「金額あるいは人数を確認してください。」と表示させ、割り算部分の処理をしないようにします。

プログラミングを簡単にするために、発想を変えて、上記のエラー条件が起きる場合を逆に考えてみます。

合計支払額の数値が入力されている。
人数の数値が入力されている。
人数の数値が0でない。

この条件を全て満たす場合には割り算を行うという形で次のようにコードを書きます。

条件式は

if(条件が整っている){

割り算を計算して結果表示

}else{
エラー表示「金額あるいは人数を確認してください。」
}

ここで条件式を考えます。ネットで調べる時には、Android 条件式 などでいろいろなコードが調べられます。

最初に、合計支払額の数値が入力されている という条件式を考えます。合計支払額はEditTextという部品で名前は goukei です。入力されているかどうかの判定は、文字(数値)の長さを調べます。数字が1文字以上かどうかを判定します。何も入力されていなければ長さは0になります。

length()というコードが長さを調べるコードです。以上は >= です。

goukei.getText().toString().length() >= 1

人数の数値も同じようなコードになります。

ninzu.getText().toString().length() >= 1

人数の数値が0(ゼロ)ではないというコードは、まず、文字列が0に等しいかどうかというコードを書き、それを逆(否定 ! )にします。簡単にいうと、等しくないとなるわけです。

!(ninzu.getText().toString().equals("0"))

これで、ninzuが0(ゼロ)でない、となります。

以上の3つの条件を条件式である if( )の中に入れ、&& で全ての条件を満たすように繋げます。&&は次の意味です。

式A && 式B  式Aと式Bの両方を満たす

ちょっとややこしいですが、次のようにコードを書き換えます。
(int kaihi=0;の下を書き換えてください。)
warizan90.JPG

//エラー処理 入力がない or 人数が0でないか判定
if (goukei.getText().toString().length() >= 1 &&
ninzu.getText().toString().length() >= 1 &&
!(ninzu.getText().toString().equals("0"))){

//上記判定でエラーがなければ割り算を計算

//数値を取り出す
kingaku=Integer.valueOf(goukei.getText().toString());
nin=Integer.valueOf(ninzu.getText().toString());

//割り算を行い、結果を表示
kaihi=kingaku/nin;
kekka.setText(String.valueOf(kaihi));

}else{//エラーがあった場合の処理 注意を表示

kekka.setText("金額あるいは人数を確認してください。");
}


これで実行すればエラーが出ない割り勘アプリの完成となります。

参考にWarikanActivity.javaのソースを全て乗せておきます。
(全てコピーして書き換えれば動くと思います。)




package com.test.warikan;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;



public class WarikanActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final EditText goukei;//合計支払額の数値を入れる
final EditText ninzu; //人数の数値を入れる
final TextView kekka; //割り算の結果を表示する

goukei = (EditText)findViewById(R.id.editText1);//合計
ninzu = (EditText)findViewById(R.id.editText2);//人数
kekka = (TextView)findViewById(R.id.textView2);//結果表示

Button keisanbtn;//計算ボタンの宣言

keisanbtn = (Button)findViewById(R.id.button1);//計算ボタン

keisanbtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//ボタンがクリックされた時の処理を書く

//kekka.setText("押されたよ");

//数値を入れる変数(箱)を宣言する、初期値を0
int kingaku=0;
int nin=0;
int kaihi=0;

//エラー処理 入力がない or 人数が0でないか判定
if (goukei.getText().toString().length() >= 1 &&
ninzu.getText().toString().length() >= 1 &&
!(ninzu.getText().toString().equals("0"))){

//上記判定でエラーがなければ割り算を計算

//数値を取り出す
kingaku=Integer.valueOf(goukei.getText().toString());
nin=Integer.valueOf(ninzu.getText().toString());

//割り算を行い、結果を表示
kaihi=kingaku/nin;
kekka.setText(String.valueOf(kaihi));

}else{//エラーがあった場合の処理 注意を表示

kekka.setText("金額あるいは人数を確認してください。");
}
}
});


}
}



posted by Kunihiko at 18:03 | Comment(1) | TrackBack(0) | 割り勘アプリの開発を体験 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ありがとうございました
Posted by at 2012年05月09日 17:03
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック


現在、このブログは更新を停止しています。
最新の内容は次のブログでお願いします。


新ブログ
趣味は長生きと秘密
http://home.mynsworld.com/