Here is the some code from main.xml as i have used android:OnClick
<Button
android:id="@+id/button6"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_weight="0.166"
android:text="6"
android:onClick="ProcessInput"
android:layout_height="match_parent"
android:gravity="fill" />
Here is the code of main.java with process input method
public void ProcessInput(View v)
{
Button btn = (Button) v;
String text = btn.getText().toString();
String currentInput = inputText.getText().toString();
int currentInputLen = currentInput.length();
String evalResult = null;
double userInputValue = Double.NaN;
if(btn.getText()=="del")
{
if(resetInput)
return;
int endIndex = currentInputLen - 1;
if(endIndex<1)
{
inputText.setText("0");
}
else
{
inputText.setText(currentInput.subSequence(0, endIndex));
}
}
else if(btn.getText()=="±")
{
if (currentInputLen > 0 && currentInput != "0")
{
// Already has (-) sign. Remove that sign
if (currentInput.charAt(0) == '-')
{
inputText.setText(currentInput.subSequence(1,
currentInputLen));
}
// Prepend (-) sign
else
{
inputText.setText("-" + currentInput.toString());
}
}
}
else if(btn.getText()==".")
{
if (hasFinalResult || resetInput) {
inputText.setText("0" + mDecimalSeparator);
hasFinalResult = false;
resetInput = false;
} else if (currentInput.contains("."))
return;
else
inputText.append(mDecimalSeparator);
}
else if(btn.getText()=="+"||btn.getText()=="-"||btn.getText()=="/"||btn.getText()=="x")
{
if (resetInput) {
mInputStack.pop();
mOperationStack.pop();
} else {
if (currentInput.charAt(0) == '-') {
mInputStack.add("(" + currentInput + ")");
} else {
mInputStack.add(currentInput);
}
mOperationStack.add(currentInput);
}
mInputStack.add(text);
mOperationStack.add(text);
dumpInputStack();
evalResult = evaluateResult(false);
if (evalResult != null)
inputText.setText(evalResult);
resetInput = true;
}
else if(btn.getText()=="1"||btn.getText()=="2"||btn.getText()=="3"||btn.getText()=="4"||btn.getText()=="5"||btn.getText()=="6"||btn.getText()=="7"||btn.getText()=="8"||btn.getText()=="9"||btn.getText()=="0")
{
inputText.append(text);
resetInput = false;
}
}
Here is complete main.java code if it is needed
package com.example.calculator;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Iterator;
import java.util.Stack;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
private TextView inputText,resultText;
double firstNumber=0,secondNumber=0,result=0;
int firstOperand=0,TotalOperator=0;
Stack<String> mInputStack;
Stack<String> mOperationStack;
TextView mStackText;
boolean resetInput = false;
boolean hasFinalResult = false;
String mDecimalSeparator;
double memoryValue = Double.NaN;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DecimalFormat currencyFormatter = (DecimalFormat) NumberFormat.getInstance();
char decimalSeparator = currencyFormatter.getDecimalFormatSymbols().getDecimalSeparator();
mDecimalSeparator = Character.toString(decimalSeparator);
setContentView(R.layout.main);
mInputStack = new Stack<String>();
mOperationStack = new Stack<String>();
inputText = (TextView) findViewById(R.id.InputText);
inputText.setText("0");
resultText = (TextView) findViewById(R.id.ResultText);
resultText.setText("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void ProcessInput(View v)
{
Button btn = (Button) v;
String text = btn.getText().toString();
String currentInput = inputText.getText().toString();
int currentInputLen = currentInput.length();
String evalResult = null;
double userInputValue = Double.NaN;
if(btn.getText()=="del")
{
if(resetInput)
return;
int endIndex = currentInputLen - 1;
if(endIndex<1)
{
inputText.setText("0");
}
else
{
inputText.setText(currentInput.subSequence(0, endIndex));
}
}
else if(btn.getText()=="±")
{
if (currentInputLen > 0 && currentInput != "0")
{
// Already has (-) sign. Remove that sign
if (currentInput.charAt(0) == '-')
{
inputText.setText(currentInput.subSequence(1,
currentInputLen));
}
// Prepend (-) sign
else
{
inputText.setText("-" + currentInput.toString());
}
}
}
else if(btn.getText()==".")
{
if (hasFinalResult || resetInput) {
inputText.setText("0" + mDecimalSeparator);
hasFinalResult = false;
resetInput = false;
} else if (currentInput.contains("."))
return;
else
inputText.append(mDecimalSeparator);
}
else if(btn.getText()=="+"||btn.getText()=="-"||btn.getText()=="/"||btn.getText()=="x")
{
if (resetInput) {
mInputStack.pop();
mOperationStack.pop();
} else {
if (currentInput.charAt(0) == '-') {
mInputStack.add("(" + currentInput + ")");
} else {
mInputStack.add(currentInput);
}
mOperationStack.add(currentInput);
}
mInputStack.add(text);
mOperationStack.add(text);
dumpInputStack();
evalResult = evaluateResult(false);
if (evalResult != null)
inputText.setText(evalResult);
resetInput = true;
}
else if(btn.getText()=="1"||btn.getText()=="2"||btn.getText()=="3"||btn.getText()=="4"||btn.getText()=="5"||btn.getText()=="6"||btn.getText()=="7"||btn.getText()=="8"||btn.getText()=="9"||btn.getText()=="0")
{
inputText.append(text);
resetInput = false;
}
}
private void dumpInputStack() {
Iterator<String> it = mInputStack.iterator();
StringBuilder sb = new StringBuilder();
while (it.hasNext()) {
CharSequence iValue = it.next();
sb.append(iValue);
}
mStackText.setText(sb.toString());
}
private String evaluateResult(boolean requestedByUser) {
if ((!requestedByUser && mOperationStack.size() != 4)
|| (requestedByUser && mOperationStack.size() != 3))
return null;
String left = mOperationStack.get(0);
String operator = mOperationStack.get(1);
String right = mOperationStack.get(2);
String tmp = null;
if (!requestedByUser)
tmp = mOperationStack.get(3);
double leftVal = Double.parseDouble(left.toString());
double rightVal = Double.parseDouble(right.toString());
double result = Double.NaN;
if (operator.equals("/")) {
result = leftVal / rightVal;
} else if (operator.equals("x")) {
result = leftVal * rightVal;
} else if (operator.equals("+")) {
result = leftVal + rightVal;
} else if (operator.equals("-")) {
result = leftVal - rightVal;
}
String resultStr = doubleToString(result);
if (resultStr == null)
return null;
mOperationStack.clear();
if (!requestedByUser) {
mOperationStack.add(resultStr);
mOperationStack.add(tmp);
}
return resultStr;
}
private String doubleToString(double value) {
if (Double.isNaN(value))
return null;
long longVal = (long) value;
if (longVal == value)
return Long.toString(longVal);
else
return Double.toString(value);
}
}
I can't figure out whats wrong i tried to change btn.getText()=="1" to btn.getText()=='1' but that was also error. What should i do?