java.lang.NumberFormatException:无法再将''整数解析为整数

时间:2014-08-25 03:58:44

标签: java android

我会从用户处获取两个号码,但EditText中的这个号码必须转换为int。我认为它应该可行,但我仍然遇到Android Studio中的编译代码问题。

CatLog 显示错误符合:

int wiek = Integer.parseInt(wiekEditText.getText().toString());

以下是我的完整Android代码:

public class MyActivity extends ActionBarActivity {

    int Wynik; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        int Tmax, RT;
        EditText wiekEditText = (EditText) findViewById(R.id.inWiek);
        EditText tspoczEditText = (EditText) findViewById(R.id.inTspocz);
        int wiek = Integer.parseInt(wiekEditText.getText().toString());
        int tspocz = Integer.parseInt(tspoczEditText.getText().toString());

        Tmax = 220 - wiek;
        RT = Tmax - tspocz;
        Wynik = 70*RT/100 + tspocz;

        final EditText tempWiekEdit = wiekEditText;
        TabHost tabHost = (TabHost) findViewById(R.id.tabHost);   //Do TabHost'a z layoutu

        tabHost.setup();                         

        TabHost.TabSpec tabSpec = tabHost.newTabSpec("Calc");
        tabSpec.setContent(R.id.Calc);
        tabSpec.setIndicator("Calc");
        tabHost.addTab(tabSpec);

        tabSpec = tabHost.newTabSpec("Hints");                    
        tabSpec.setContent(R.id.Hints);
        tabSpec.setIndicator("Hints");
        tabHost.addTab(tabSpec);

        final Button Btn = (Button) findViewById(R.id.Btn);      
        Btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"blablabla"+ "Wynik",Toast.LENGTH_SHORT).show();
            }
        });

        wiekEditText.addTextChangedListener(new TextWatcher() {      

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                Btn.setEnabled(!(tempWiekEdit.getText().toString().trim().isEmpty()));
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
       return super.onOptionsItemSelected(item);
    }
}

4 个答案:

答案 0 :(得分:3)

在不查看布局XML的情况下,通过阅读您想要从用户那里获取2个数字的问题描述,我只能假设那些2 EditText s为空开始了。

@Override
protected void onCreate(Bundle savedInstanceState) {

    ...

    EditText wiekEditText = (EditText) findViewById(R.id.inWiek);
    EditText tspoczEditText = (EditText) findViewById(R.id.inTspocz);

    // edit text are still empty...
    int wiek = Integer.parseInt(wiekEditText.getText().toString()); // error occurs!
    int tspocz = Integer.parseInt(tspoczEditText.getText().toString());

    ...

}

您可能希望在用户互动后解析数字,可能是将代码设置为OnClickListenerTextWatcher

此示例使用OnClickListener。用户点击按钮后即可完成计算。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    // add 'final'
    final EditText wiekEditText = (EditText) findViewById(R.id.inWiek);
    final EditText tspoczEditText = (EditText) findViewById(R.id.inTspocz);

    // remove offending code

    final EditText tempWiekEdit = wiekEditText;
    TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

    ...

    final Button Btn = (Button) findViewById(R.id.Btn);      
    Btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // move the parsing code here
            int Tmax, RT;
            int wiek = Integer.parseInt(wiekEditText.getText().toString());
            int tspocz = Integer.parseInt(tspoczEditText.getText().toString());

            Tmax = 220 - wiek;
            RT = Tmax - tspocz;
            Wynik = 70*RT/100 + tspocz;

            Toast.makeText(getApplicationContext(),"blablabla"+ Wynik,Toast.LENGTH_SHORT).show();
        }
    });

    ...

}

- 或 -

通过在布局XML上添加android:text="0"来首次防止错误设置默认编号

<EditText android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:ems="10"
    android:id="@+id/inTspocz"
    android:layout_marginTop="25dp"
    android:hint="Your resting heart rate (Hint)" 
    android:text="0" />

答案 1 :(得分:1)

当您尝试将String转换为数字时,可以抛出

NuberFormatException,其中该数字可能是int,float或任何其他Java数字类型。添加以下语句检查输出是什么。

System.out.println(wiekEditText.getText().toString());

这可能有助于识别字符串返回的内容。您的wiekEditText.getText().toString()没有错误。

答案 2 :(得分:0)

您的输入可能包含前导或尾随或两者中的空格。您可以尝试使用

int wiek = Integer.parseInt(wiekEditText.getText().toString().trim());

为什么trim()

例如:

   try {
        int num = Integer.parseInt(" 12 ");
        System.out.println(num);
    } catch (NumberFormatException e) {
        System.out.println("Error " + e.toString());
    }
    try {
        int num = Integer.parseInt(" 12 ".trim());
        System.out.println(num);
    } catch (NumberFormatException e) {
        System.out.println("Error " + e.toString());
    }

Out put:

   Error java.lang.NumberFormatException: For input string: " 12 "
   12

在这种情况下,如果

   `wiekEditText.getText().toString()`

null

你应该使用像

这样的验证
     int num = Integer.parseInt(wiekEditText.getText().toString()!=null
                                 ?wiekEditText.getText().toString().trim():"0");

答案 3 :(得分:0)

请确保您要解析的数字不大于2,147,483,647或-2,147,483,647,这是整数最大值。 因此,在这种情况下,您可能需要使用

long varName = Long.parseLong(yourStringVar);