1

forビューをレイアウトに追加するループを作成しようとしています。-loopforは正常に動作しています (初期化された変数で試しました) が、 から整数を取得する必要がありEditTextます。私は a を使用しtry-catch、LogCat は次のことを教えてくれます...

java.lang.NumberFormatException: invalid int "".

ウェブサイト developers.android.com は、これは文字列を整数に誤って変換したことによるものだと言っていますが、EditText.

これは私のコードです...

public class UserPref2Activity extends Activity 

{
@Override

public void onCreate(Bundle savedInstanceState) 
{
    try
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        EditText numSensors = (EditText) findViewById(R.id.num_sensors);
        String change = numSensors.getText().toString();
        int i = Integer.parseInt(change);

        int j; //iterates through the for loop 

        ScrollView sv = new ScrollView(this);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        sv.addView(ll);

        for(j=1;j<i;j++)
        {
            EditText name = new EditText(this);
            name.setText("Name:");
            EditText type = new EditText(this);
            type.setText("Type:");
            EditText bits = new EditText(this);
            bits.setText("Bits:");
            ll.addView(name);
            ll.addView(type);
            ll.addView(bits);
        } 
        this.setContentView(sv);
    }
    catch (Exception e)
    {
        //sends actual error message to the log
        Log.e("ERROR", "ERROR IN CODE:" + e.toString());
        //prints out location of error
        e.printStackTrace();
    }
  }
}

そして、これは私のXMLファイルです...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" 
android:id="@+id/userLayout" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Enter number of sensors:" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:id="@+id/num_sensors" /> 

4

7 に答える 7

5

最初EditTextは、その値に空Stringがあります(つまり"")。これは明らかに番号ではないので、電話をかけようとすると、そのようにint i = Integer.parseInt(change);言ってエラーが発生します。

これを修正する方法はいくつかありますが、基本的には、初期値を設定してエラーを防ぐか、空の文字列を検出して適切に処理するかのいずれかです。

エラーの発生を防ぐために...

EditText numSensors = (EditText) findViewById(R.id.num_sensors);
String change = numSensors.getText().toString();
if (change.equals("")){ // detect an empty string and set it to "0" instead
    change = "0";
}
int i = Integer.parseInt(change);

または、のように初期値を設定し"0"ますが、これは空ではなくインターフェイスの値も表示するため、すべての目的に適しているとは限りませんEditText...0EditText

<EditText android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:inputType="number"
          android:text="0"
          android:id="@+id/num_sensors" />

エラーを検出して適切に処理したい場合は、これを行います...

EditText numSensors = (EditText) findViewById(R.id.num_sensors);
String change = numSensors.getText().toString();
int i = 0; // set it to 0 as the default
try {
    i = Integer.parseInt(change);
}
catch (NumberFormatException e){}

これは基本的にの値を設定し、コードでエラーが発生しないi = 0場合にのみ別の値に変更します。try{}

于 2012-06-20T13:51:25.307 に答える
1

空の文字列を解析しようとすると、常に。がスローされNumberFormatExceptionます。

コードを次のように変更します。

int i;
String change = numSensors.getText().toString();
if(change.length>0)
{
  i = Integer.parseInt(change);
}
else
{
   i=0;
}  
于 2012-06-20T05:23:27.460 に答える
0

最初の編集テキストは空になると思うので、 ""(blank is not a valid input)はエラーを表示します。データを編集テキストに入力してから、イベントをクリックして解析作業を行う必要があります。

于 2012-06-20T05:23:09.223 に答える
0

レイアウトファイルを編集します

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number"
android:text="0"
    android:id="@+id/num_sensors" /> 
于 2012-06-20T05:24:42.553 に答える
0

parseInt()で空の文字列を渡しているので、文字列をintに解析する前に次のように確認してください。

EditText numSensors  = (EditText) findViewById(R.id.num_sensors);
String change  = numSensors.getText().toString();
if (change.trim().equals("")) {
 //DO SOMETHING HERE
}
else
{
int i = Integer.parseInt(change);
YOUR CODE HERE....
}
于 2012-06-20T05:29:22.317 に答える
0

""編集テキストに最初は何もないか /Empty String がないため、このエラーが発生しています。編集テキストがまだ表示されているときにテキストを取得しても意味がありません。ユーザーが編集テキストの値の入力を完了したことを示すボタンまたはその他のイベントが必要になる場合があります。その後、先に進んで編集テキストの値を取得できます。ただし、常に空の文字列をチェックしてください

于 2012-06-20T05:27:16.833 に答える
0

空の EditText フィールドで 2 回目のクリックが行われたときに発生する "" 値を int が取得しないようにするには、Java コードに次の行を挿入します。

int i;
String change = numSensors.getText().toString();
if(!(change.equals("")))
{
  i = Integer.parseInt(change);
}
于 2015-11-15T23:25:15.777 に答える