Android String to int崩溃我的应用程序

时间:2014-03-08 08:43:50

标签: android string android-intent int

我正在尝试创建一个应用,用户将电话号码输入EditText变量NumberBox,然后从字符串转换为int并在方法intent.putExtra("address", PhoneNumberint);中使用当我尝试这样做,应用程序崩溃,所以请让我知道这里的问题。以某种方式从字符串到int的转换是错误的吗?

package com.example.module09;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    //variables

    EditText    NumberBox;
    Button      SMSButton;



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

        //

        NumberBox = (EditText) findViewById(R.id.NumberBox);
        SMSButton = (Button) findViewById(R.id.SMSButton); 
        final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());


        //onclick
        SMSButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.putExtra("address", PhoneNumberint);
                intent.setType("vnd.android-dir/mms-sms");
                startActivity(intent);

            }
        });




    }

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

}

4 个答案:

答案 0 :(得分:4)

移动它:

final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString()); 

onCreate方法到onClick方法。

应用崩溃是因为您已将上述代码放入onCreate方法中。由于Activity创建时EditText的值 null String包含 null 。当null被解析为Integer时,它会抛出异常。

答案 1 :(得分:1)

你尝试获取onCreate方法的值为null,你必须在按钮点击时得到它的值,如下面的代码:

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

        //

        NumberBox = (EditText) findViewById(R.id.NumberBox);
        SMSButton = (Button) findViewById(R.id.SMSButton); 


        //onclick
        SMSButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.putExtra("address", PhoneNumberint);
                intent.setType("vnd.android-dir/mms-sms");
                startActivity(intent);

            }
        });

答案 2 :(得分:1)

您无法在onCreate()方法

上执行此操作
 final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());

第一次你的String包含空数据,因为它始终是EditText的空值,这就是为什么你总是得到空指针,因为你不能将null值解析为int。

更好的方法是在Button的Click事件上移动该行。

答案 3 :(得分:1)

由于NumberFormatException

,应用程序崩溃了

问题在于您在设置文本之前从EditText中提取文本。如果EditText的内容为空/空字符串,Integer.parseInt将抛出java.lang.NumberFormatException
罪魁祸首是这一行:

final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());

要解决此问题move this line under onClick()。但是如果单击按钮而没有在EditText中输入任何内容,应用程序仍将崩溃。

在将String解析为Int之前,请写入以检查String是否为空/空。
在较轻的一面,此处不需要final关键字。