2012-02-25 48 views
0

我正在android中制作一个计算器,但由于某种原因,它不会让我从编辑文本中读取数据。这是我用于声明编辑文本的代码:在android中制作一个简单的计算器

这对按钮中的一个的代码:

one.setOnClickListener(new View.OnClickListener() {  
     public void onClick (View v) { 
      AnswerBox.append("1"); 
     } 
    }); 
} 

这是读取次数的方法:

public Double number_reader() 

{ 
    Double num1; 
    String s; 
    s=AnswerBox.getText().toString(); 
    num1=Double.valueOf(s); 

    return num1; 

} 

问题是在number_reader方法中的AnswerBox,它说它无法解析..

回答

1

你可能在onCreate方法声明AnswerBox

现在AnswerBox是一个局部变量,它不onCreate方法之外存在,因此它不能在方法number_reader被发现。

要解决它使私有字段在你的类:

private final EditText AnserBox; 

然后在onCreate方法做到这一点:

AnswerBox = (EditText) findViewById(R.id.AnswerBox); 
0

您decl是最终的,并将其创建为空。之后你可以添加到它。

0

我认为你需要使用Double.parseDouble(S)代替。如果您需要,您可以参考我给出的答案here

0

删除最终的关键字,并在您的类字段中添加EditText(在所有方法之外声明,但在Activity中)。之后,读取和写入EditText就可以了。 另外对于附注来说,使用首字母大写的变量名称不是一个好习惯,这是针对类或接口的。尝试使用一个较低的camelCase。

0

你可以试试这个代码..

package com.example.showoff; 

import java.util.ArrayList; 
import android.os.Bundle; 
import android.app.Activity; 
import android.text.method.DigitsKeyListener; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 


import android.widget.TextView; 

public class MainActivity extends Activity { 

     TextView edittest1; 

     Button one, two, three, four, five, six, seven, eight, nine, zero, add, sub, mul, div, cancel, equal; 

     ArrayList<Float> math = new ArrayList<Float>(); 
     float m1; 
     float m2; 
     float temp; 

     int currentOperation = 0; 
     int nextOperation; 

     final static int ADD = 1; 
     final static int SUBTRACT = 2; 
     final static int MULTIPLY =3; 
     final static int DIVISION = 4; 
     final static int EQUALS = 0; 
     final static int CLEAR = 1; 
     final static int DONT_CLEAR = 0; 
     int clearDisplay = 0; 




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

      edittest1 = (TextView) findViewById(R.id.edittest1); 



      one =(Button) findViewById(R.id.btnNum1Id); 
      two =(Button) findViewById(R.id.btnNum2Id); 
      three =(Button) findViewById(R.id.btnNum3Id); 
      four =(Button) findViewById(R.id.btnNum4Id); 
      five =(Button) findViewById(R.id.btnNum5Id); 
      six =(Button) findViewById(R.id.btnNum6Id); 
      seven =(Button) findViewById(R.id.btnNum7Id); 
      eight =(Button) findViewById(R.id.btnNum8Id); 
      nine =(Button) findViewById(R.id.btnNum9Id); 
      zero =(Button) findViewById(R.id.btnNum0Id); 
      add =(Button) findViewById(R.id.btnNumAddId); 
      sub =(Button) findViewById(R.id.btnNumSubId); 
      mul =(Button) findViewById(R.id.btnNumMulId); 
      div =(Button) findViewById(R.id.btnNumDivId); 
      cancel =(Button) findViewById(R.id.btnNumClearId); 
      equal =(Button) findViewById(R.id.btnNumEqualId); 

      edittest1.setKeyListener(DigitsKeyListener.getInstance(true,true)); 

      registerListeners(); 


    } 

    private void registerListeners() { 
     // TODO Auto-generated method stub 

     one.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("1"); 

      } 
     }); 

     two.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("2"); 

      } 
     }); 

     three.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("3"); 

      } 
     }); 
     four.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("4"); 

      } 
     }); 

     five.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("5"); 

      } 
     }); 

     six.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("6"); 

      } 
     }); 
     seven.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("7"); 

      } 
     }); 

     eight.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("8"); 

      } 
     }); 

     nine.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("9"); 

      } 
     }); 
     zero.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (clearDisplay == CLEAR) { 
        edittest1.setText(""); 
       } 
       clearDisplay = DONT_CLEAR; 
       edittest1.append("0"); 

      } 
     }); 
     add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 


       calcLogic(ADD); 
       } 
      } 
     ); 

     sub.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       calcLogic(SUBTRACT); 
      }    
     }); 
     mul.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       calcLogic(MULTIPLY); 

      } 
     }); 
     div.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       calcLogic(DIVISION);      
      } 
     }); 
     equal.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       calcLogic(EQUALS); 

      } 
     }); 
     cancel.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       edittest1.setText("0"); 
       m1 = 0; 
       m2 = 0; 
       math.removeAll(math); 
       currentOperation = 0; 
       nextOperation = 0;  

      } 
     }); 


} 
    private void calcLogic(int operator){ 
     math.add(Float.parseFloat(edittest1.getText().toString())); 

      if (operator != EQUALS) { 
       nextOperation = operator; 
      } 
      else if (operator == EQUALS){ 
       nextOperation = 0; 
       //operator=' '; 
      } 



      switch (currentOperation) { 
      case ADD:    
       m1 = math.get(0); 
       m2 = math.get(1); 

       math.removeAll(math); 

       math.add(m1 + m2); 


       edittest1.setText(String.format("%.3f", math.get(0))); 



       break; 
      case SUBTRACT: 
       m1 = math.get(0); 
       m2 = math.get(1); 

       math.removeAll(math); 

       math.add(m1 - m2); 

       edittest1.setText(String.format("%.3f", math.get(0))); 
       break; 
      case MULTIPLY: 
       m1 = math.get(0); 
       m2 = math.get(1); 

       math.removeAll(math); 

       math.add(m1 * m2); 

       edittest1.setText(String.format("%.3f", math.get(0))); 
       break; 
      case DIVISION: 
       m1 = math.get(0); 
       m2 = math.get(1); 

       math.removeAll(math); 

       math.add(m1/m2); 

       edittest1.setText(String.format("%.3f", math.get(0))); 
       break; 
      } 

      clearDisplay = CLEAR; 
      currentOperation = nextOperation; 
      if (operator == EQUALS) { 
       m1 = 0; 
       m2 = 0; 
       math.removeAll(math); 
      } 

     } 
     @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

}