fc2ブログ

2013
06/20

「Quick JUnit」とは

JUnitの
実装コード上で Ctrl+9 →テストコードを開く
テストコード上で Ctrl+9 →実装コードを開く

という便利なツール。

使ってみた。

設定に「テストケースのネーミングルール」というのがあるので
Androidの構成に合わせて追加する。
「${package}.test.${type}Test」

いざ!

テストコード上で Ctrl+9 →実装コードが開いた!

実装コード上で Ctrl+9 →「テスティングペアがありません」

おい!!
迷子か!

Android開発には対応してない模様。
スポンサーサイト



2013
06/17

前回までの画像を見ると、「XXXは必ず入力してください」の
XXXがすべて英語で表示されている。

そう、フィールド名がそのまま表示されているのだ。

それじゃぁちょっとユーザーとしては使いにくい。
というわけで、項目名を任意の文字列に差し替える方法を紹介する。

▼TestForm.java

@Widget(id = R.id.testform_edittext_name, nameResId = R.string.name)
@Required
public String name;


▼strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="name">名前</string>
</resources>


たったこれだけ。
nameResIdにはstrings.xmlで定義したIDを指定する。
EditTextの上に置いたTextViewと同じ文字列を指定してやれば、とってもわかりやすい。

同じようにすべての項目にnameResIdを設定してあげた結果がこちら。

enhancerTestフォーム6

2013
06/17

前回は必須チェックだけだったので、今回はそれ以外についても書いてみる。

前回の画像でチラリと出現しているが、
今回はチェックボックスと日付のチェックについて。

まずはチェックボックス。

enhancerTestチェック

上記の画像を見ると、メッセージに「hobbiesは少なくとも2個選択してください」と表示されている。
そう!必須選択個数を簡単に設定できるのだ!便利!!

さっそく、定義方法を紹介。
下記コードの@Requiredに注目。
※@Widgetの定義は前回のラジオボタンと同じ方法。(RadioGroupの代わりにLinearLayoutを使おう!)
▼TestForm.java

@Widget(id = R.id.testform_checkbox_hobby, values = {
@WidgetValue(id = R.id.testform_checkbox_hobby_cook, value = "cook"),
@WidgetValue(id = R.id.testform_checkbox_hobby_drive, value = "drive"),
@WidgetValue(id = R.id.testform_checkbox_hobby_pet, value = "drive") })
@Required(atLeast = 2)
public List<String> hobbies;


たったこれだけ。実に簡単。

次に、日付のチェックについて説明する。
日付のチェックは2種類用意されている。
ただ、日付形式で入力されているかどうかをチェックする「@DatePattern」と
さらに過去の日付であるかどうかもチェックする「@PastDate」。
今回は生年月日なので、過去の日付かどうかチェックする。


@Widget(id = R.id.testform_edittext_birthday)
@Required
@PastDate(value = "yyyy-MM-dd", allowToday = true)
public String birthday;


上記の通り、@PastDateをフィールドに付与するだけ。
valueは任意なので指定しなくてもいい。
デフォルトは yyyy/MM/dd となる。(※端末の言語設定が日本語の場合)

allowTodayは今日を許可するかどうか。上記は今日を許可する(エラーとしない)設定。
こちらも任意で、デフォルトはfalseになっている。

ではでは表示を見てみよう。

▼過去の日付だが、形式に誤りがある
enhancerTestフォーム3

▼形式は正しいが、未来の日付である
enhancerTestフォーム4

▼OK
enhancerTestフォーム5

欲を言うと、1番目の形式誤りは
「birthdayはyyyy-MM-dd形式で入力してください」と表示してほしいが(わがまま)
こんな便利なライブラリを本当にありがとうございます。

2013
06/17

前回はAndroidFormEnhancerというライブラリを取り込んだので
今回は実際にそれを使ってみる。

こちらに作者ご本人からの説明があるので
それに素直に従って実装してみる。
https://github.com/ksoichiro/AndroidFormEnhancer/blob/master/README.ja.md

まず、こんなフォームを用意した。
enhancerTestフォーム


次に、このフォームの入力項目を定義したクラスを1つ作成する。

public class TestForm {

public String name;

public String gender;

public String birthday;

public List<String> hobbies;

}



そして今度はそれと入力項目のViewをidで紐づけていく。
名前(name)と性別(gender)を例とする。

▼TestForm.java

@Widget(id = R.id.testform_edittext_name)
public String name;

@Widget(id = R.id.testform_radiogroup_gender, values = {
@WidgetValue(id = R.id.testform_radiobutton_gender_male, value = "M"),
@WidgetValue(id = R.id.testform_radiobutton_gender_female, value = "F") })
public String gender;


▼activity_android_form_enhancer_test.xml

<EditText
android:id="@+id/testform_edittext_name" />

<RadioGroup
android:id="@+id/testform_radiogroup_gender" />
<RadioButton
android:id="@+id/testform_radiobutton_gender_male" />
<RadioButton
android:id="@+id/testform_radiobutton_gender_female" />
</RadioGroup>


そしていよいよ、チェック内容を定義する。
まずは名前。入力必須とする。

▼TestForm.java

@Widget(id = R.id.testform_edittext_name)
@Required
public String name;


次に、性別。こちらも入力必須。

▼TestForm.java

@Widget(id = R.id.testform_radiogroup_gender, values = {
@WidgetValue(id = R.id.testform_radiobutton_gender_male, value = "M"),
@WidgetValue(id = R.id.testform_radiobutton_gender_female, value = "F") })
@Required
public String gender;



最後にチェックを行う。
「チェック」ボタンを押下したときにチェックを行うこととする。
というわけで、下記のocClickメソッドの処理に注目してほしい。
▼AndroidFormEnhancerTestActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
~略~
Button checkButton = (Button) findViewById(R.id.testform_button_submit);
checkButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
ValidationResult result = new FormHelper(TestForm.class, AndroidFormEnhancerTestActivity.this)
.validate();
if (result.hasError()) {
// エラーメッセージを表示します
Toast.makeText(AndroidFormEnhancerTestActivity.this, result.getAllSerializedErrors(),
Toast.LENGTH_SHORT).show();
} else {

Toast.makeText(AndroidFormEnhancerTestActivity.this, "エラーはありません", Toast.LENGTH_SHORT).show();
}
}
});
}

FormHelperの第一引数に、さきほど定義したフォームのクラスを設定するのがポイント。
なんとこれだけでロジックごりごりせずに入力チェックが行える。

enhancerTestチェック

2013
06/14

R.javaが生成されない理由として、ネットで調べると
大概こう書いてある。

「レイアウトxmlにエラーがある」
「AndroidManifest.xmlにエラーがある」
「クリーン・ビルドせよ」
「ビルドパスが間違っている」
等々。

しかし、どれを確認しても解決しない!

AndroidManifest.xmlを見てみた。

<uses-sdk
android:targetSdkVersion="17"/>

そういえば、さっきSDKをアップデートしたんだった。

↓修正↓

<uses-sdk
android:targetSdkVersion="22"/>


直った。
プロフィール

nov

Author:nov
パセリはおやつです。

最新コメント

最新トラックバック

タグクラウドとサーチ

> tags

検索フォーム

ブロとも申請フォーム

QRコード
QR