我正在尝试创建一个应用,用户将电话号码输入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;
}
}
答案 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
关键字。