package com.example.calculator;
import android.os.Bundle; import
androidx.appcompat.app.AppCompatActivity; import android.view.View;
import android.widget.Button; import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Boolean firstNopresent=false;
private Boolean isOpPressed= false;
private double firstno=0;
private double secondno=0;
private int secondnoindex=0;
private char currentOp;
final TextView calculatorScreen = findViewById(R.id.calulatorScreen);
final TextView answerScreen = findViewById(R.id.AnswerScreen);
double answer = 0;
private Boolean Result=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.keypad_fragment);
final Button n0=findViewById(R.id.zero);
final Button n1=findViewById(R.id.one);
final Button n2=findViewById(R.id.two);
final Button n3=findViewById(R.id.three);
final Button n4=findViewById(R.id.four);
final Button n5=findViewById(R.id.five);
final Button n6=findViewById(R.id.six);
final Button n7=findViewById(R.id.seven);
final Button n8=findViewById(R.id.eight);
final Button n9=findViewById(R.id.nine);
final Button n00=findViewById(R.id.twozero);
final Button division=findViewById(R.id.div);
final Button multiply=findViewById(R.id.mul);
final Button addition=findViewById(R.id.add);
final Button substract=findViewById(R.id.substract);
final Button clear=findViewById(R.id.clear);
final Button equals=findViewById(R.id.equals);
final Button mod=findViewById(R.id.mod);
final ImageButton backspace=findViewById(R.id.backspace);
final Button dot=findViewById(R.id.dot);
final Result Answer=new Result();
final View.OnClickListener calculatorListener =new View.OnClickListener() {
@Override
public void onClick(View v) {
final int id=v.getId();
switch (id){
case R.id.zero:
calculatorScreen.append("0");
break;
case R.id.one:
calculatorScreen.append("1");
break;
case R.id.two:
calculatorScreen.append("2");
break;
case R.id.three:
calculatorScreen.append("3");
break;
case R.id.four:
calculatorScreen.append("4");
break;
case R.id.five:
calculatorScreen.append("5");
break;
case R.id.six:
calculatorScreen.append("6");
break;
case R.id.seven:
calculatorScreen.append("7");
break;
case R.id.eight:
calculatorScreen.append("8");
break;
case R.id.nine:
calculatorScreen.append("9");
break;
case R.id.twozero:
calculatorScreen.append("00");
break;
case R.id.dot:
calculatorScreen.append(".");
}
firstNopresent=true;
if (firstNopresent && isOpPressed ){
String screenContentt=calculatorScreen.getText().toString();
String secondNumberString= screenContentt.substring(secondnoindex,screenContentt.length());
secondno= Double.parseDouble(secondNumberString);
answer=Answer.getAnswer(firstno,secondno,currentOp);
answerScreen.setText((int) answer);
Result=true;
}
}
};
final View.OnClickListener operatorListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
int id= v.getId();
switch (id){
case R.id.mod:
calculatorScreen.append("%");
currentOp = '%';
break;
case R.id.mul:
calculatorScreen.append("*");
currentOp = '*';
break;
case R.id.div:
calculatorScreen.append("/");
currentOp = '/';
break;
case R.id.add:
calculatorScreen.append("+");
currentOp = '+';
break;
case R.id.substract:
calculatorScreen.append("+");
currentOp = '-';
break;
}
if (firstNopresent){
String screenContent=calculatorScreen.getText().toString();
secondnoindex=screenContent.length() + 1;
firstno=Double.parseDouble(screenContent);
isOpPressed=true;
}
}
};
n0.setOnClickListener(calculatorListener);
n1.setOnClickListener(calculatorListener);
n2.setOnClickListener(calculatorListener);
n3.setOnClickListener(calculatorListener);
n4.setOnClickListener(calculatorListener);
n5.setOnClickListener(calculatorListener);
n6.setOnClickListener(calculatorListener);
n7.setOnClickListener(calculatorListener);
n8.setOnClickListener(calculatorListener);
n9.setOnClickListener(calculatorListener);
n00.setOnClickListener(calculatorListener);
division.setOnClickListener(operatorListener);
multiply.setOnClickListener(operatorListener);
addition.setOnClickListener(operatorListener);
substract.setOnClickListener(operatorListener);
mod.setOnClickListener(operatorListener);
dot.setOnClickListener(calculatorListener);
backspace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String displayElements = calculatorScreen.getText().toString();
int length=displayElements.length();
if (length>0){
displayElements=displayElements.substring(0,length-1);
calculatorScreen.setText(displayElements);
}
if (displayElements.length()==0){
firstNopresent=false;
isOpPressed=false;
firstno=0;
}
}
});
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calculatorScreen.setText("");
firstNopresent=false;
firstno=0;
isOpPressed=false;
answer=0;
}
});
equals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Result){
calculatorScreen.setText(String.valueOf(answer));
isOpPressed=false;
firstno=answer;
firstNopresent=true;
}
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.calculator">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3。
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/calulatorScreen" android:layout_width="match_parent" android:layout_height="210dp" android:gravity="center|end" android:textAppearance="@style/TextAppearance.AppCompat.Display1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/AnswerScreen" android:layout_width="match_parent" android:layout_height="71dp" android:gravity="center|end" app:layout_constraintBottom_toTopOf="@+id/grid" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/calulatorScreen" /> <com.google.android.material.circularreveal.CircularRevealGridLayout android:id="@+id/grid" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="281dp" android:background="#E7FAF8" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <Button android:id="@+id/nine" android:layout_width="90dp" android:layout_height="90dp" android:layout_row="1" android:layout_column="0" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_9" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/eight" android:layout_width="90dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_8" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/seven" android:layout_width="90dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_7" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/substract" android:layout_width="142dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/substrat" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/six" android:layout_width="90dp" android:layout_height="90dp" android:layout_row="2" android:layout_column="0" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_6" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/five" android:layout_width="90dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_5" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/four" android:layout_width="90dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_4" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/add" android:layout_width="140dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/add" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/three" android:layout_width="wrap_content" android:layout_height="90dp" android:layout_row="3" android:layout_column="0" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/three" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/two" android:layout_width="wrap_content" android:layout_height="90dp" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_2" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/one" android:layout_width="90dp" android:layout_height="90dp" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_1" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/mul" android:layout_width="140dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/multiply" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/clear" android:layout_width="90dp" android:layout_height="90dp" android:layout_row="0" android:layout_column="0" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/clear" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/mod" android:layout_width="90dp" android:layout_height="90dp" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/mod" android:textSize="@dimen/textsize" android:textStyle="italic" /> <ImageButton android:id="@+id/backspace" android:layout_width="90dp" android:layout_height="79dp" android:layout_row="0" android:layout_column="2" android:layout_margin="0dp" android:background="#E7FAF8" android:contentDescription="@string/backspace" android:src="?attr/actionModeCloseDrawable" /> <Button android:id="@+id/div" android:layout_width="140dp" android:layout_height="90dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/divide" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/equals" android:layout_width="140dp" android:layout_height="90dp" android:layout_row="4" android:layout_column="3" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/equals" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/dot" android:layout_width="90dp" android:layout_height="90dp" android:layout_row="4" android:layout_column="2" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/dot" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/twozero" android:layout_width="90dp" android:layout_height="90dp" android:layout_row="4" android:layout_column="0" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/doublezero" android:textSize="@dimen/textsize" android:textStyle="italic" /> <Button android:id="@+id/zero" android:layout_width="90dp" android:layout_height="90dp" android:layout_margin="0dp" android:background="#E7FAF8" android:fontFamily="sans-serif-smallcaps" android:includeFontPadding="true" android:text="@string/_0" android:textSize="@dimen/textsize" android:textStyle="italic" /> </com.google.android.material.circularreveal.CircularRevealGridLayout> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>'''
4。
package com.example.calculator; public class Result { private double firstNumber=0; private double secondNumber; private char Operator; private double Answer; public double getAnswer(double A,double B,char O) { firstNumber= A; secondNumber=B; Operator = O; if (Operator =='+'){ secondNumber+=firstNumber;} else if (Operator =='-'){ secondNumber -= firstNumber; } else if (Operator =='*'){ secondNumber *= firstNumber; } else if (Operator =='/'){ secondNumber /= firstNumber; } else if (Operator=='%'){ secondNumber %= firstNumber; } return Answer; } }
findViewById
。下面的示例将导致崩溃,因为TextView view = findViewById(R.id.myText)
在onCreate
方法之前执行,因此findViewById
在布局膨胀之前执行。:package me.a_hoffmann.findviewtest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView view = findViewById(R.id.myText);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
在您的情况下,当创建活动对象时,您需要在视图膨胀之前对此两个视图执行findViewById
:
final TextView calculatorScreen = findViewById(R.id.calulatorScreen); final TextView answerScreen = findViewById(R.id.AnswerScreen);
您的活动找不到,因为尚未调用onCreate
。这通常应该向您显示以下异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference