※ ChatGPTを利用し、要約された質問です(原文:EditText型をint型に変換し通貨表示に)
EditText型をint型に変換し通貨表示に
このQ&Aのポイント
AndroidのEditTextに、ユーザがインプットメソッドを用いて数字を入力した際、その値をint型変数と、String型変数に代入し、通貨書式で表示したい。
現在のコードでは、アプリが起動直後にエラーが発生してしまい、原因はintへの変換部分です。
修正するためには、EditTextから取得した文字列を適切にint型に変換する必要があります。
■やりたいこと:
AndroidのEditTextに、ユーザがインプットメソッドを用いて数字を入力した際、その値を
1. int型変数と、String型変数に代入(2つの型で、後々使えるよう変数内にデータ保持したい)
2. EditText(スマホ画面)には、入力後「通貨」書式で表示したい
「通貨」書式とは、EditTextに「1000と入力したら、1,000」のように、位取りして表示をしたいという意味です。
下記コードだと、アプリが起動直後に落ちてしまいます。
実行後に表示されるLogCatには「FATAL EXCEPTION」と書かれています。
■レイアウト(xml:activity_main)
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"//画面から数値のみ:入力制限
android:digits="0123456789"/>
■クラスファイル
public class MainActivity extends Activity implements OnFocusChangeListener {
EditText editText;
String str;
String str2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//editText1=layoutのEditTextのid
EditText editText = (EditText)findViewById(R.id.editText1);
editText.setOnFocusChangeListener(this);
str = editText.getText().toString(); //EditTextに入力された数字を取得
int i = Integer.parseInt(str); //Integerクラスの値=整数値を取得★
NumberFormat numFormat = NumberFormat.getCurrencyInstance();
//通貨フォーマット
str2 = numFormat.format(i); //整数値を通貨フォーマットに
}
@Override
public void onFocusChange(View arg0, boolean getFocus) {
if (getFocus){
editText.setText(str2); //EditTextにセット(表示)
}
}
}
====================================================================
原因は「★」の部分のようです。ここを通過するととデバッガが落ちます。
(EditTextに半角数字を入れても、それがint型の保証がないからでしょうか)
上の「やりたいこと」を実現するには、どこを修正すればよいでしょうか。
お礼
ヒントをありがとうございました。
補足
結局初期(未入力時の)数値がないのと、またエラーはtry/catchを書く以前の問題と思い込んでいたのが原因でした。 実はtry/catchで囲んだだけで(入力を促すだけで)エラーを返さなくなりました。数値はint型だと入力できる桁数が意外と少ないためlong型に変え、EditTextへのフォーカスを抜けるタイミングが間違っていたので、onFocusChangeメソッド内に処理をまるまる持ってきて、 @Override public void onFocusChange(View v, boolean getFocus) { if (v == editText1 && !getFocus){ //1行目 str1 = editText1.getText().toString(); //EditTextに入力された数字を取得 str1= str1.replace(",", ""); //EditTextに一度入力された(,)を撤去:修正時に必要 try{ long lng = Long.parseLong(str1); //Integerクラスの値=整数値を取得 NumberFormat numFormat = NumberFormat.getNumberInstance(); //位取りフォーマット str2 = numFormat.format(lng); //整数値を通貨フォーマットに editText1.setText(str2); //EditTextにセット(表示) } catch(Exception e){ Toast.makeText(this, "数字を入力してください", Toast.LENGTH_LONG).show(); } } } としました。 これでExcelのセルのように、入力後セル(EditText)を抜けると、通貨表示ができるようになりました。