如何修复我的 java.lang.NullPointerException (android)?
How do I fix my java.lang.NullPointerException (android)?
每当我 运行 我的代码时,我都会收到一个错误,看起来它源于我代码的第 14 行,因为 java.lang.NullPointerException。这是我的代码:
package com.example.android.rng;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends ActionBarActivity {
// get EditText by id
final EditText et=(EditText)findViewById(R.id.minimum);
final EditText tv=(EditText)findViewById(R.id.maximum);
// set Et as an integer
int min = Integer.parseInt(et.getText().toString());
int max = Integer.parseInt(tv.getText().toString());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*
* Generates a random number when the "Generate" button is pressed
*/
public void randomNumGen (View View) {
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
displayResults(i1);
}
/*
* Displays RandomNumGen's product to the screen
*/
public void displayResults (int results) {
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.results);
textView.setText(results);
}
}
我已经多次扫描我的代码,但似乎找不到问题,而且我对编码还很陌生,所以我对我正在使用的大部分代码没有太多经验。
你的 EditTexts 是空的,因为在你调用 findViewById
的时候你没有膨胀你的布局所以它 returns 空,在 onCreate
方法中调用它 setContentView()
final EditText et=(EditText)findViewById(R.id.minimum);
final EditText tv=(EditText)findViewById(R.id.maximum);
// set Et as an integer
int min = Integer.parseInt(et.getText().toString());
int max = Integer.parseInt(tv.getText().toString());
将它放在 onCreate 函数中!
在 setContentView
调用之后才能访问布局中的对象。
将 onCreate
更改为:
// get EditText by id
final EditText et;
final EditText tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et=(EditText)findViewById(R.id.minimum);
tv=(EditText)findViewById(R.id.maximum);
// set Et as an integer
int min = Integer.parseInt(et.getText().toString());
int max = Integer.parseInt(tv.getText().toString());
此外,代码现在假定两个 EditText 字段将始终包含数字。如果它们一开始是空的,并且用户输入了数字,那么您应该将代码移到您在按下按钮或类似内容中获取数据的地方。
每当我 运行 我的代码时,我都会收到一个错误,看起来它源于我代码的第 14 行,因为 java.lang.NullPointerException。这是我的代码:
package com.example.android.rng;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends ActionBarActivity {
// get EditText by id
final EditText et=(EditText)findViewById(R.id.minimum);
final EditText tv=(EditText)findViewById(R.id.maximum);
// set Et as an integer
int min = Integer.parseInt(et.getText().toString());
int max = Integer.parseInt(tv.getText().toString());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*
* Generates a random number when the "Generate" button is pressed
*/
public void randomNumGen (View View) {
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
displayResults(i1);
}
/*
* Displays RandomNumGen's product to the screen
*/
public void displayResults (int results) {
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.results);
textView.setText(results);
}
}
我已经多次扫描我的代码,但似乎找不到问题,而且我对编码还很陌生,所以我对我正在使用的大部分代码没有太多经验。
你的 EditTexts 是空的,因为在你调用 findViewById
的时候你没有膨胀你的布局所以它 returns 空,在 onCreate
方法中调用它 setContentView()
final EditText et=(EditText)findViewById(R.id.minimum);
final EditText tv=(EditText)findViewById(R.id.maximum);
// set Et as an integer
int min = Integer.parseInt(et.getText().toString());
int max = Integer.parseInt(tv.getText().toString());
将它放在 onCreate 函数中!
在 setContentView
调用之后才能访问布局中的对象。
将 onCreate
更改为:
// get EditText by id
final EditText et;
final EditText tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et=(EditText)findViewById(R.id.minimum);
tv=(EditText)findViewById(R.id.maximum);
// set Et as an integer
int min = Integer.parseInt(et.getText().toString());
int max = Integer.parseInt(tv.getText().toString());
此外,代码现在假定两个 EditText 字段将始终包含数字。如果它们一开始是空的,并且用户输入了数字,那么您应该将代码移到您在按下按钮或类似内容中获取数据的地方。