簡體   English   中英

我的 android 工作室制作的 apk 無法正常工作

[英]My android studio made apk is not working properly

我正在使用 Android Studio 3.2 並且我的應用程序正在顯示,但按鈕沒有觸發操作請建議任何代碼更改,以便它們觸發應用程序上的事件

MainActivity 代碼是:

package com.example.myfalconcalculator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView expression;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


     Button num1 = findViewById(R.id.num1);
     expression =  findViewById(R.id.expression);
     Button num2 = findViewById(R.id.num2);
     Button num3 = findViewById(R.id.num3);
     Button num4 = findViewById(R.id.num4);
     Button num5 = findViewById(R.id.num5);
     Button num6 = findViewById(R.id.num6);
     Button num7 = findViewById(R.id.num7);
     Button num8 = findViewById(R.id.num8);
     Button num9 = findViewById(R.id.num9);
     Button num0 = findViewById(R.id.num0);
     Button plus = findViewById(R.id.plus);
     Button minus = findViewById(R.id.minus);
     Button equalsTo = findViewById(R.id.equalsTo);
     Button closeBrace = findViewById(R.id.closeBrace);
     Button openBrace = findViewById(R.id.openBrace);
     Button clear = findViewById(R.id.clear);
     Button delete = findViewById(R.id.delete);
     Button exponential = findViewById(R.id.exponential);
     Button divideBy = findViewById(R.id.divideBy);


    num1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "1");
        }

    });
    num2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "2");
        }
    });

    num3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "3");
        }
    });

    num4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "4");
        }
    });

    num5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "5");
        }
    });

    num6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "6");
        }
    });

    num7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "7");
        }
    });

    num8.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "8");
        }
    });

    num9.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "9");
        }
    });

    num0.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "0");
        }
    });

    plus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "+");
        }
    });

    minus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "-");
        }
    });

    exponential.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "*");
        }
    });

    divideBy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "/");
        }
    });

    equalsTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SimpleMathSolver mathSolver = new SimpleMathSolver(expression.getText().toString());
            try {
                expression.setText(String.valueOf(mathSolver.solve()));
            } catch (Exception e) {
                expression.setText("Input Not Valid");
            }
        }
    });

    closeBrace.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + ")");
        }
    });

    openBrace.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "(");
        }
    });

    clear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText("");
        }
    });

    delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String tempExpression = expression.getText().toString().substring(0, expression.getText().toString().length()-1);
            expression.setText(tempExpression);
        }
    });

    }

}

Main Activity 文件依賴於另一個文件:

package com.example.myfalconcalculator;

import java.util.Scanner;
import java.util.Stack;

public class SimpleMathSolver {
    private String inputExp;

    private final char PLUS = '+';
    private final char MINUS = '-';
    private final char MULTIPLY = '*';
    private final char DIVIDE = '/';
    private final char OPENBRACE = '(';
    private final char CLOSEBRACE = ')';

    public SimpleMathSolver(String inputExp) {
    this.inputExp = inputExp;
    }

    public int solve() throws Exception {
    String withoutBraceInputExp = solveBraces(this.inputExp);
    return solveMath(withoutBraceInputExp);
    }

    private String solveBraces(String inputExp) throws Exception {
    String output = inputExp;

    int closeBraceIndex = output.indexOf(CLOSEBRACE);
    while (closeBraceIndex >= 0) {
        int openBraceIndex = output.substring(0, closeBraceIndex).lastIndexOf(OPENBRACE);
        String solveStr = output.substring(openBraceIndex + 1, closeBraceIndex);
        int value = solveMath(solveStr);
        output = output.substring(0, openBraceIndex) + value
                + output.substring(closeBraceIndex + 1, output.length());
        closeBraceIndex = output.indexOf(CLOSEBRACE);
    }
    return output;
    }

    private int solveMath(String inputExp) throws Exception {
    Stack<Integer> numberStack = new Stack<Integer>();
    Stack<Character> symbolStack = new Stack<Character>();

    updateStacks(inputExp, numberStack, symbolStack);
    solveMathSymbol(numberStack, symbolStack, DIVIDE);
    solveMathSymbol(numberStack, symbolStack, MULTIPLY);
    solveMathSymbol(numberStack, symbolStack, MINUS);
    solveMathSymbol(numberStack, symbolStack, PLUS);

    return numberStack.pop();
    }

    private void solveMathSymbol(Stack<Integer> numberStack, Stack<Character> symbolStack, char symbol) {
    Stack<Integer> tempNumberStack = new Stack<Integer>();
    Stack<Character> tempSymbolStack = new Stack<Character>();

    while (symbolStack.size() > 0) {
        char ch = symbolStack.pop();
        if (ch == symbol) {
            int pop1 = numberStack.pop();
            int pop2 = numberStack.pop();
            int out = 0;
            switch (symbol) {
                case PLUS:
                    out = pop2 + pop1;
                    break;
                case MINUS:
                    out = pop2 - pop1;
                    break;
                case MULTIPLY:
                    out = pop2 * pop1;
                    break;
                case DIVIDE:
                    out = pop2 / pop1;
                    break;
            }
            numberStack.push(out);
        } else {
            tempSymbolStack.push(ch);
            int numpop = numberStack.pop();
            tempNumberStack.push(numpop);
        }
    }
    while (tempSymbolStack.size() > 0) {
        char charpop = tempSymbolStack.pop();
        symbolStack.push(charpop);

        int numpop = tempNumberStack.pop();
        numberStack.push(numpop);
    }
    }

    private void updateStacks(String inputExp, Stack<Integer> numberStack, Stack<Character> symbolStack)
        throws Exception {
    int number = 0;

    for (int i = 0; i < inputExp.length(); i++) {
        char ch = inputExp.charAt(i);

        if (Character.isDigit(ch)) {
            number = number * 10 + Integer.parseInt(String.valueOf(ch));
        } else {
            numberStack.push(number);
            number = 0;

            if (ch == PLUS || ch == MINUS || ch == MULTIPLY || ch == DIVIDE) {
                symbolStack.push(ch);
            } else {
                throw new Exception("Unknown Math Symbol " + ch);
            }
        }
    }

    numberStack.push(number);
    }

    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String retryOp = "N";
    do {
        System.out.println("Enter Math Expression");
        String inputExp = scanner.nextLine();

        SimpleMathSolver solver = new SimpleMathSolver(inputExp);
        try {
            System.out.println("Result: " + solver.solve());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        System.out.println("Do you want to try this again");
        retryOp = scanner.nextLine();
    } while (retryOp.equalsIgnoreCase("Y"));
    scanner.close();
    System.exit(0);
    }
}

這是活動 main.xml 文件:

<android.support.constraint.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">


    <Button
    android:id="@+id/closeBrace"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="1dp"
    android:text=")"
    app:layout_constraintBottom_toTopOf="@+id/equalsTo"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/openBrace"
    app:layout_constraintTop_toBottomOf="@+id/divideBy" />

    <Button
    android:id="@+id/openBrace"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginBottom="1dp"
    android:text="("
    app:layout_constraintBottom_toTopOf="@+id/equalsTo"
    app:layout_constraintEnd_toStartOf="@+id/closeBrace"
    app:layout_constraintStart_toEndOf="@+id/num9"
    app:layout_constraintTop_toBottomOf="@+id/exponential" />

    <Button
    android:id="@+id/divideBy"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:text="/"
    app:layout_constraintBottom_toTopOf="@+id/closeBrace"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/exponential"
    app:layout_constraintTop_toBottomOf="@+id/minus" />

    <Button
    android:id="@+id/exponential"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:text="*"
    app:layout_constraintBottom_toTopOf="@+id/openBrace"
    app:layout_constraintEnd_toStartOf="@+id/divideBy"
    app:layout_constraintStart_toEndOf="@+id/num6"
    app:layout_constraintTop_toBottomOf="@+id/plus" />

    <Button
    android:id="@+id/plus"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:text="+"
    app:layout_constraintBottom_toTopOf="@+id/exponential"
    app:layout_constraintEnd_toStartOf="@+id/minus"
    app:layout_constraintStart_toEndOf="@+id/num3"
    app:layout_constraintTop_toBottomOf="@+id/delete" />

    <Button
    android:id="@+id/minus"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:text="-"
    app:layout_constraintBottom_toTopOf="@+id/divideBy"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/plus"
    app:layout_constraintTop_toBottomOf="@+id/delete" />

    <Button
    android:id="@+id/num0"
    android:layout_width="252dp"
    android:layout_height="76dp"
    android:layout_marginStart="3dp"
    android:layout_marginLeft="3dp"
    android:layout_marginBottom="5dp"
    android:text="0"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/equalsTo"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/num8" />

    <Button
    android:id="@+id/num5"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginBottom="2dp"
    android:text="5"
    app:layout_constraintBottom_toTopOf="@+id/num8"
    app:layout_constraintEnd_toStartOf="@+id/num6"
    app:layout_constraintStart_toEndOf="@+id/num4"
    app:layout_constraintTop_toBottomOf="@+id/num2" />

    <Button
    android:id="@+id/num4"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginBottom="1dp"
    android:text="4"
    app:layout_constraintBottom_toTopOf="@+id/num7"
    app:layout_constraintEnd_toStartOf="@+id/num5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/num1" />

    <Button
    android:id="@+id/num6"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginEnd="1dp"
    android:layout_marginRight="1dp"
    android:layout_marginBottom="2dp"
    android:text="6"
    app:layout_constraintBottom_toTopOf="@+id/num9"
    app:layout_constraintEnd_toStartOf="@+id/exponential"
    app:layout_constraintStart_toEndOf="@+id/num5"
    app:layout_constraintTop_toBottomOf="@+id/num3" />

    <Button
    android:id="@+id/num8"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginTop="1dp"
    android:text="8"
    app:layout_constraintBottom_toTopOf="@+id/num0"
    app:layout_constraintEnd_toStartOf="@+id/num9"
    app:layout_constraintStart_toEndOf="@+id/num7"
    app:layout_constraintTop_toBottomOf="@+id/num5" />

    <Button
    android:id="@+id/num7"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="1dp"
    android:text="7"
    app:layout_constraintBottom_toTopOf="@+id/num0"
    app:layout_constraintEnd_toStartOf="@+id/num8"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/num4" />

    <Button
    android:id="@+id/num9"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginTop="1dp"
    android:layout_marginEnd="1dp"
    android:layout_marginRight="1dp"
    android:text="9"
    app:layout_constraintBottom_toTopOf="@+id/num0"
    app:layout_constraintEnd_toStartOf="@+id/openBrace"
    app:layout_constraintStart_toEndOf="@+id/num8"
    app:layout_constraintTop_toBottomOf="@+id/num6" />

    <Button
    android:id="@+id/num3"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:text="3"
    app:layout_constraintBottom_toTopOf="@+id/num6"
    app:layout_constraintEnd_toStartOf="@+id/plus"
    app:layout_constraintStart_toEndOf="@+id/num2"
    app:layout_constraintTop_toBottomOf="@+id/clear" />

    <Button
    android:id="@+id/num2"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:text="2"
    app:layout_constraintBottom_toTopOf="@+id/num5"
    app:layout_constraintEnd_toStartOf="@+id/num3"
    app:layout_constraintStart_toEndOf="@+id/num1"
    app:layout_constraintTop_toBottomOf="@+id/clear" />

    <Button
    android:id="@+id/equalsTo"
    android:layout_width="150dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="5dp"
    android:text="="
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/num0"
    app:layout_constraintTop_toBottomOf="@+id/num9" />

    <Button
    android:id="@+id/clear"
    android:layout_width="252dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="8dp"
    android:text="Clear"
    app:layout_constraintEnd_toStartOf="@+id/delete"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/expression" />

    <TextView
    android:id="@+id/expression"
    android:layout_width="400dp"
    android:layout_height="331dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="6dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="8dp"
    android:text=""
    app:layout_constraintBottom_toTopOf="@+id/clear"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

    <Button
    android:id="@+id/delete"
    android:layout_width="148dp"
    android:layout_height="76dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:text="Delete"
    app:layout_constraintBottom_toTopOf="@+id/plus"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/clear"
    app:layout_constraintTop_toBottomOf="@+id/expression" />

    <Button
    android:id="@+id/num1"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:text="1"
    app:layout_constraintBottom_toTopOf="@+id/num4"
    app:layout_constraintEnd_toStartOf="@+id/num2"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/clear" />
</android.support.constraint.ConstraintLayout>

請建議如何解決這個問題。

你不能做final Button num1 = findViewById(R.id.num1); 在 oncreate 之外,你所有的findViewById(R.id.foo); 語句必須在 onCreate 中(或至少在調用 onCreate 之后)

Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById<Button>(R.id.foo)

}

暫無
暫無

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

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