簡體   English   中英

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

[英]How do I fix my java.lang.NullPointerException (android)?

每當我運行我的代碼時,由於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);
    }
}

我已經遍歷我的代碼多次,但似乎找不到問題,而且我對編碼還很陌生,因此我對使用的大多數代碼沒有太多經驗。

您的EditTexts為null,因為在您調用findViewById時,您的布局沒有膨脹,因此它返回null,請在setContentView()之后在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字段將始終包含數字。 如果它們開始是空的並且用戶輸入了數字,則您可能應該將代碼移動到通過按鈕或類似方式獲取數據的位置。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM