我的应用程序在edittext上打印Null

时间:2016-07-25 07:15:14

标签: java android nullpointerexception

我正在制作计算器应用程序,每当我启动应用程序并首次点击数字屏幕(Edittext)显示Null(Number)

在应用启动其展示n

后,我第一次点击null(num)号码

这是我的应用程序屏幕截图:

enter image description here

主要活动:

package com.example.user.calculator;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {
private EditText _screen;
private String display;
private String currentOperator = "";
private String  result = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    _screen = (EditText)findViewById(R.id.textView);
    _screen.setText(display);
}

private void updateScreen() {
    _screen.setText(display);


}

public void onClickNumber(View v) {
    if (result != ""){
        clear();
        updateScreen();

}
    Button b = (Button)v;
    display += b.getText();
    updateScreen();
}


private boolean isOperator(char op){
    switch (op){
        case '+':
        case '-':
        case 'X':
        case '/': return true;
        default: return false;
    }
}

public void onClickOperator(View v){

    if(display == "") return;

    Button b =(Button)v;
    if (result != ""){
        String _display = result;
        clear();
        display = _display;
    }

    if(currentOperator != "") {
        Log.d("CalcX", ""+display.charAt(display.length()-1));
        if(isOperator(display.charAt(display.length()-1))){
           display = display.replace(display.charAt(display.length()-1), b.getText().charAt(0));
            updateScreen();
            return;
        }else {
            getResult();
            display = result;
            result = "";
    }
        currentOperator = b.getText().toString();
    }
    display += b.getText();
    currentOperator = b.getText().toString();
    updateScreen();

}

private void clear(){

    display = "";
    currentOperator = "";
    result = "";

}



public void onClickClear(View v) {

    clear();
    updateScreen();

}

private double operate(String a, String b, String op) {
    switch (op) {

        case "+":
            return Double.valueOf(a) + Double.valueOf(b);
        case "-":
            return Double.valueOf(a) - Double.valueOf(b);
        case "X":
            return Double.valueOf(a) * Double.valueOf(b);
        case "/":
            try {
                return Double.valueOf(a) / Double.valueOf(b);
            } catch (Exception e) {
                Log.d("Calc", e.getMessage());
            }
        default:
            return -1;
    }
}

private boolean getResult(){
    if(currentOperator == "") return false;
    String[] operation = display.split(Pattern.quote(currentOperator));
    if (operation.length < 2 ) return false;
    result = String.valueOf( operate(operation[0], operation[1], currentOperator));
    return true;
}

 public void onClickEqual(View v){
     if(display == "") return;
     if(!getResult()) return;
    _screen.setText(display + "\n" + String.valueOf(result));
 }


}

4 个答案:

答案 0 :(得分:2)

display设为""

private String display = "";

最初将字符串变量初始化为null

因此,通过""初始化字符串,您可以阻止在null中获取EditText

答案 1 :(得分:0)

您需要将默认值设为&#39;显示&#39;领域。默认情况下,java为字段变量赋予null。如果您尝试显示一个null的字符串,它将显示为&#39; null&#39;

private String display= "";

private String display="123";

答案 2 :(得分:0)

_screen = (EditText)findViewById(R.id.textView);
**_screen.setText(display);** //remove this line because you have to set number after user entry...

OR

String display = null;初始化变量..

答案 3 :(得分:0)

您需要使用String比较.equals("")

if(str.equals(""))   // for check  == condition
if(!str.equals(""))   // for check  != condition

此处str是您的resultdisplaycurrentOperator

在声明部分,您需要将display变量初始化为=""。那是display = ""

这可能会对你有所帮助。