java Android EditText到int会话错误
这可能是问得最多的问题,但很难找到答案。首先我是新手。我想做一个简单的二次方程公式应用程序。这将使我们能够快速找到解决方案。我碰到一个问题,Android Studio说代码没问题,但在打开应用程序后设备崩溃了
private Button mButton;
private EditText mEdit;
private EditText mEdit1;
private EditText mEdit2;
private TextView mText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mButton = (Button)findViewById(R.id.button2);
mEdit = (EditText)findViewById(R.id.editText);
mEdit1 = (EditText)findViewById(R.id.editText2);
mEdit2 = (EditText)findViewById(R.id.editText3);
mText = (TextView)findViewById(R.id.textView4);
//Int definēšana
final int i1 = Integer.parseInt(mEdit.getText().toString());
final int i2 = Integer.parseInt(mEdit1.getText().toString());
final int i3 = Integer.parseInt(mEdit2.getText().toString());
mButton.setOnClickListener(
new View.OnClickListener()
{
public void onClick(View view)
{
//Mainīgo ievade
int a = i1;
//Pārbauda vai a nav nulle
if (a == 0){
mText.setText(String.valueOf("Nav kvadrātvienādojums"));
} else {
int b = i2;
int c = i3;
//Diskriminanta aprēķināšana
double diskr = (b*b)-4*a*c;
//Kvadrātsakne no diskriminanta
double sd = (double) Math.sqrt(diskr);
//Sakņu aprēķināšana
double x1 = (-b+sd)/(2*a);
double x2 = (-b-sd)/(2*a);
//Rezultāta izvade
if (diskr < 0){
mText.setText(String.valueOf("Kvadrātvienādojumam nav sakņu"));
} else if (diskr == 0){
mText.setText(String.valueOf("Kvadrātvienādojumam ir viena sakne: " + x1));
} else {
mText.setText(String.valueOf("Kvadrātvienādojuma saknes: " + x1 + " un " + x2));
}
}
}
});
}
以及可能有助于检测问题的logcat
FATAL EXCEPTION: main
Process: com.homemade.prtbust.kvadratvienadojums, PID: 4552
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.homem`enter code here`ade.prtbust.kvadratvienadojums/com.homemade.prtbust.kvadratvienadojums.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method '安卓.text.Editable 安卓.widget.EditText.getText()' on a null object reference
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:3133)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3243)
at 安卓.app.ActivityThread.access$1000(ActivityThread.java:218)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1718)
at 安卓.os.Handler.dispatchMessage(Handler.java:102)
at 安卓.os.Looper.loop(Looper.java:145)
at 安卓.app.ActivityThread.main(ActivityThread.java:6917)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method '安卓.text.Editable 安卓.widget.EditText.getText()' on a null object reference
at com.homemade.prtbust.kvadratvienadojums.MainActivity.onCreate(MainActivity.java:38)
at 安卓.app.Activity.performCreate(Activity.java:6609)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:3086)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3243)
at 安卓.app.ActivityThread.access$1000(ActivityThread.java:218)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1718)
at 安卓.os.Handler.dispatchMessage(Handler.java:102)
at 安卓.os.Looper.loop(Looper.java:145)
at 安卓.app.ActivityThread.main(ActivityThread.java:6917)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
# 1 楼答案
您没有为活动分配任何布局,因此您的所有编辑文本、按钮和文本视图都不存在,当您试图通过代码访问其中任何一个时,程序将崩溃
其次,您应该在单击按钮时读取变量的值,而不是在oncreate中,因为这将导致另一个错误,因为您将尝试解析空字符串(除非您在xml中的android:text标记中设置了值)。 我也不会宣布它们为最终版本(因为以后您将无法修改它们)
尝试使用以下代码:
# 2 楼答案
我想你错过了
setContentView(R.layout.activity_main);
“activity_name是布局的名称,其中是编辑文本”在使用
findViewById
之前必须调用setContentView
# 3 楼答案
在设置活动的内容视图后,请尝试编写此代码
在创建EditText视图之前,无法从EditText获取文本。 如果这并没有解决你的问题,试着在onStart上写下你的i1/2/3变量