I created a Simple Calculator for my mobile app class and I am having trouble. M
ID: 3551598 • Letter: I
Question
I created a Simple Calculator for my mobile app class and I am having trouble.
My code works but when I click a button, nothing happens. My calculations should come from a websie but nohting is working.
package com.dietel.simplecalculator;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
protected String oper;
protected String a;
protected String b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View arg0) {
Button plus = (Button) findViewById(R.id.PlusButton);
Button minus = (Button) findViewById(R.id.MinusButton);
Button mult = (Button) findViewById(R.id.MultiplyButton);
Button div = (Button) findViewById(R.id.DivideButton);
if (arg0 == (Button) plus)
{
oper="Add";
}
else if (arg0 == (Button) minus)
{
oper="Subtract";
}
else if (arg0 == (Button) mult)
{
oper="Multiply";
}
else if (arg0 == (Button) div)
{
oper="Divide";
}
Toast.makeText(MainActivity.this,oper, Toast.LENGTH_LONG).show();//for testing
plus.setClickable(false);
minus.setClickable(false);
mult.setClickable(false);
div.setClickable(false);
new LongRunningGetIO().execute();
}
@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;
}
private class LongRunningGetIO extends AsyncTask<Void, Void, String> {
protected String getASCIIContentFromEntity(HttpEntity entity)
throws IllegalStateException, IOException {
InputStream in = entity.getContent();
StringBuffer out = new StringBuffer();
int n = 1;
while (n > 0) {
byte[] b = new byte[4096];
n = in.read(b);
if (n > 0)
out.append(new String(b, 0, n));
}
return out.toString();
}
@Override
protected String doInBackground(Void... params) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
EditText op1= (EditText) findViewById(R.id.OperandOneEditText);
EditText op2= (EditText) findViewById(R.id.OperandTwoEditText);
HttpGet httpGet = new HttpGet(
"http://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx/"+oper+"&a="+op1.getText()+"&b="+op2.getText()); //TODO operands
String text = null;
try {
HttpResponse response = httpClient.execute(httpGet,
localContext);
HttpEntity entity = response.getEntity();
text = getASCIIContentFromEntity(entity);
} catch (Exception e) {
return e.getLocalizedMessage();
}
return text;
}
protected void onPostExecute(String results) {
if (results != null) {
EditText et = (EditText) findViewById(R.id.ResultEditText);
et.setText(results);
}
Button plus = (Button) findViewById(R.id.PlusButton);
Button minus = (Button) findViewById(R.id.MinusButton);
Button mult = (Button) findViewById(R.id.MultiplyButton);
Button div = (Button) findViewById(R.id.DivideButton);
plus.setClickable(true);
minus.setClickable(true);
mult.setClickable(true);
div.setClickable(true);
Toast.makeText(MainActivity.this,results, Toast.LENGTH_LONG).show();//for testing
}
}
}
Explanation / Answer
Well, I think this SourceCode will work for You :-
package com.dietel.simplecalculator;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
public String str ="";
Character op = 'q';
int i,num,numtemp;
EditText showResult;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showResult = (EditText)findViewById(R.id.result_id);
}
public void btn1Clicked(View v){
insert(1);
}
public void btn2Clicked(View v){
insert(2);
}
public void btn3Clicked(View v){
insert(3);
}
public void btn4Clicked(View v){
insert(4);
}
public void btn5Clicked(View v){
insert(5);
}
public void btn6Clicked(View v){
insert(6);
}
public void btn7Clicked(View v){
insert(7);
}
public void btn8Clicked(View v){
insert(8);
}
public void btn9Clicked(View v){
insert(9);
}
public void btnplusClicked(View v){
perform();
op = '+';
}
public void btnminusClicked(View v){
perform();
op = '-';
}
public void btndivideClicked(View v){
perform();
op = '/';
}
public void btnmultiClicked(View v){
perform();
op = '*';
}
public void btnequalClicked(View v){
calculate();
}
public void btnclearClicked(View v){
reset();
}
private void reset() {
// TODO Auto-generated method stub
str ="";
op ='q';
num = 0;
numtemp = 0;
showResult.setText("");
}
private void insert(int j) {
// TODO Auto-generated method stub
str = str+Integer.toString(j);
num = Integer.valueOf(str).intValue();
showResult.setText(str);
}
private void perform() {
// TODO Auto-generated method stub
str = "";
numtemp = num;
}
private void calculate() {
// TODO Auto-generated method stub
if(op == '+')
num = numtemp+num;
else if(op == '-')
num = numtemp-num;
else if(op == '/')
num = numtemp/num;
else if(op == '*')
num = numtemp*num;
showResult.setText(""+num);
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.