Как исправить на ClickListener - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть этот код MainActivity и activity_main.

Проблема в том, что монитор Android говорит, что я пытаюсь вызвать виртуальный метод void для нулевой ссылки на объект.Я попробовал все, но я не могу это исправить.Надеюсь, кто-нибудь может мне помочь!

1.main_activity

https://pastebin.com/2D8sjzAp

MainActivity

https://pastebin.com/dmQZwu3R

private static final char ADDITION = '+';
private static final char SUBTRACTION = '-';
private static final char MULTIPLICATION = '*';
private static final char DIVISION = '/';

private char CURRENT_ACTION;

private double valueOne = Double.NaN;
private double valueTwo;

private DecimalFormat decimalFormat;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    decimalFormat = new DecimalFormat("#.##########");

    Button buttonDot = (Button) findViewById(R.id.buttonDot);
    Button buttonZero = (Button) findViewById(R.id.buttonZero);
    Button buttonOne = (Button) findViewById(R.id.buttonOne);
    Button buttonTwo = (Button) findViewById(R.id.buttonTwo);
    Button buttonThree = (Button) findViewById(R.id.buttonThree);
    Button buttonFour = (Button) findViewById(R.id.buttonFour);
    Button buttonFive = (Button) findViewById(R.id.buttonFive);
    Button buttonSix = (Button) findViewById(R.id.buttonSix);
    Button buttonSeven = (Button) findViewById(R.id.buttonSeven);
    Button buttonEight = (Button) findViewById(R.id.buttonEight);
    Button buttonNine = (Button) findViewById(R.id.buttonNine);
    Button buttonAdd = (Button) findViewById(R.id.buttonAdd);
    Button buttonSubtract = (Button) findViewById(R.id.buttonSubtract);
    Button buttonMultiply = (Button) findViewById(R.id.buttonMultiply);
    Button buttonDivide = (Button) findViewById(R.id.buttonDivide);
    Button buttonClear = (Button) findViewById(R.id.buttonClear);
    Button buttonEqual = (Button) findViewById(R.id.buttonEqual);

    final EditText editText = (EditText) findViewById(R.id.editText);
    final TextView infoTextView = (TextView) findViewById(R.id.infoTextView);

    buttonDot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + ".");
        }
    });

    buttonZero.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "0");
        }
    });

    buttonOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           editText.setText(editText.getText() + "1");
        }
    });

    buttonTwo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "2");
        }
    });

    buttonThree.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "3");
        }
    });

    buttonFour.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "4");
        }
    });

    buttonFive.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "5");
        }
    });

    buttonSix.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "6");
        }
    });

    buttonSeven.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "7");
        }
    });

    buttonEight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "8");
        }
    });

    buttonNine.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editText.setText(editText.getText() + "9");
        }
    });

    buttonAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            computeCalculation();
            CURRENT_ACTION = ADDITION;
            infoTextView.setText(decimalFormat.format(valueOne) + "+");
            editText.setText(null);
        }
    });

   buttonSubtract.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            computeCalculation();
            CURRENT_ACTION = SUBTRACTION;
           infoTextView.setText(decimalFormat.format(valueOne) + "-");
            editText.setText(null);
        }
    });

   buttonMultiply.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            computeCalculation();
            CURRENT_ACTION = MULTIPLICATION;
            infoTextView.setText(decimalFormat.format(valueOne) + "*");
            editText.setText(null);
        }
    });

    buttonDivide.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            computeCalculation();
            CURRENT_ACTION = DIVISION;
            infoTextView.setText(decimalFormat.format(valueOne) + "/");
            editText.setText(null);
        }
    });

    buttonEqual.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            computeCalculation();
           infoTextView.setText(infoTextView.getText().toString() +
                    decimalFormat.format(valueTwo) + " = " + decimalFormat.format(valueOne));
            valueOne = Double.NaN;
            CURRENT_ACTION = '0';
        }
    });

    buttonClear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(editText.getText().length() > 0) {
                CharSequence currentText = editText.getText();
               editText.setText(currentText.subSequence(0, currentText.length()-1));
            }
            else {
                valueOne = Double.NaN;
                valueTwo = Double.NaN;
                editText.setText("");
                infoTextView.setText("");
            }
        }
    });
}

private void computeCalculation() {
    if(!Double.isNaN(valueOne)) {
        EditText editText = (EditText) findViewById(R.id.editText);
        valueTwo = Double.parseDouble(editText.getText().toString());
        editText.setText(null);

        if(CURRENT_ACTION == ADDITION)
            valueOne = this.valueOne + valueTwo;
        else if(CURRENT_ACTION == SUBTRACTION)
            valueOne = this.valueOne - valueTwo;
        else if(CURRENT_ACTION == MULTIPLICATION)
            valueOne = this.valueOne * valueTwo;
        else if(CURRENT_ACTION == DIVISION)
            valueOne = this.valueOne / valueTwo;
    }
    else {
        try {
            EditText editText = (EditText) findViewById(R.id.editText);//potential
            valueOne = Double.parseDouble(editText.getText().toString());
        }
        catch (Exception e){}
    }


}
private void showIn2(){
    EditText editText = (EditText) findViewById(R.id.editText);
    valueTwo = Double.parseDouble(editText.getText().toString());

    editText.setText(null);



    editText.setText(Integer.toString((int) valueTwo,2));



}

}

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

В среде Android существует два основных строительных блока для действия:

  • XML-макет (пользовательский экран)
  • Соответствующий внутренний код (записывается в Java или Kotlin)

Первое, что вы должны сделать при создании действия, это связать ваш XML-файл с соответствующим кодом Java или Kotlin (Android Studio сделает это за вас при создании действия)

Таким образом, вы должны включить следующую строку кода в ваш метод onCreate(), чтобы связать файл XML:

setContentView(R.layout.activity_main);

Ваш onCreate() метод должен выглядеть следующим образом:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // your code goes here
}
0 голосов
/ 16 сентября 2018

Установить вид компоновки перед связыванием видов;

Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_XML_file);//This is the line you are missing
0 голосов
/ 16 сентября 2018

Добавьте эту строку в OnCreate()

 setContentView(R.layout.activity_main);
0 голосов
/ 16 сентября 2018

Позвоните setContentView перед использованием findViewById

...