如何修复java.lang.NullPointerException(android)?

时间:2015-06-24 18:15:02

标签: java android android-studio runtime-error

每当我运行我的代码时,由于java.lang.NullPointerException,我得到的错误看起来像是源自我的代码的第14行。这是我的代码:

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);
    }
}

我已多次扫描我的代码,但似乎无法找到问题,而且我对编码很陌生,因此我对使用的大部分代码都没有多少经验。

3 个答案:

答案 0 :(得分:2)

您的EditTexts为空,因为当您调用findViewById时,您的布局没有膨胀,因此它返回null,请在onCreate

之后用setContentView()方法调用它

答案 1 :(得分:2)

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字段将始终包含数字。如果它们从空开始并且用户输入数字,您应该移动代码,在按钮按下或类似的地方获取数据。

答案 2 :(得分:0)

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函数中!