Урок 19. Пишем простой калькулятор

Обсуждение уроков
Natalia
Сообщения: 15
Зарегистрирован: 03 ноя 2012, 17:09

Re: Урок 19. Пишем простой калькулятор

Сообщение Natalia » 03 ноя 2012, 18:07

rezak90 писал(а):
Эмулятор останавливает приложение после нажатия на равно, в чем ошибка?
Если бы вы предоставили код ошибки то можно было бы сразу решить проблему. А так могу лишь предположить что происходит NullPointerException или же NumberFormatException, так как при парсинге вы не обрабатываете их.
Последняя ошибка в LogCat:
E 11-03 14:56:5... 552 552 com.windows.se... AndroidRun... at dalvik.system.NativeStart.main(Native Method)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 03 ноя 2012, 18:19

это не ошибка))) киньте весь лог
R.id.team
Политика на форуме запрещена

Natalia
Сообщения: 15
Зарегистрирован: 03 ноя 2012, 17:09

Re: Урок 19. Пишем простой калькулятор

Сообщение Natalia » 03 ноя 2012, 18:41

rezak90 писал(а):это не ошибка))) киньте весь лог
FATAL EXCEPTION: main
java.util.UnknownFonaatConversionException: Conversion: . at java.util.Formatter$FormatSpecifierParser.unknownFormatConver sionException(Formatter.java:2304)
at java.util.Formatter$FormatSpecifierParser.parsePrecision(Form <3 atter.j ava : 2372)
at java.util.Formatter$FormatSpecifierParser.parseArgumentlndexA ndFlags(Formatter.java : 2346)
at java.util.Formatter$FormatSpecifierParser.parseFormatToken(Fo matter. j ava : 2281 )
at java.util.Formatter.doFormat(Formatter.java: 1069) at j ava.util.Formatter.format(Formatter.j ava: 1040) at j ava.util.Formatter.format(Formatter.j ava: 1009) at j ava.lang.String.format(String.j ava: 1998) at j ava.lang.String.format(String.j ava: 1972)
at com. windows . seven. calculator. MainActivity. calcLogic (MainActiv <£) ity.java: 280)
at com. windows . seven. calculator. MainActi vit y. access $0 (MainActivi <£) ty.java: 250)
at com. windows . seven. calculator.MainActivityS15 . onClick (MainActi <£) vity.java: 234)
at android, view. View.performClick (View, java : 3511) at android.view.View$PerformClick.run(View.j ava: 14105) at android.os.Handler.handleCallback(Handler.j ava: 605) at android.os.Handler.handleCallback(Handler.java: 605) at android.os.Handler.dispatchMessage(Handler.j ava: 92) at android.os.Looper.loop(Looper.j ava: 137)
at android.app.ActivityThread.main(ActivityThread.j ava: 4424) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java: 511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(Zy <3 gotelnit.java: 784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.j ava: 551) at dalvik.system.NativeStart.main(Native Method)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 03 ноя 2012, 18:47

ну вот и ошибка, происходит на edText.setText(String.format("%.Of", result.get(0))); не правильный формат, мне кажется что у вас в "%.Of" стоит буква"О" а должен стоять ноль.
R.id.team
Политика на форуме запрещена

Natalia
Сообщения: 15
Зарегистрирован: 03 ноя 2012, 17:09

Re: Урок 19. Пишем простой калькулятор

Сообщение Natalia » 03 ноя 2012, 18:53

rezak90 писал(а):ну вот и ошибка, происходит на edText.setText(String.format("%.Of", result.get(0))); не правильный формат, мне кажется что у вас в "%.Of" стоит буква"О" а должен стоять ноль.
да, все на нолики поменяла, работает)

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 19. Пишем простой калькулятор

Сообщение $01ny$hko » 07 ноя 2012, 12:49

ПАМАГИТЕ!!!

public class ProfilActivity extends Activity implements OnClickListener{

Button btn_go_settings;
Button btn_ok;
EditText etName;
EditText etNumber;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.profil);

etName = (EditText) findViewById(R.id.etName);
etNumber = (EditText) findViewById(R.id.etNumber);

btn_go_settings = (Button) findViewById(R.id.btn_go_settings);
btn_go_settings.setOnClickListener(this);

btn_ok = (Button) findViewById(R.id.btn_ok);
btn_ok.setOnClickListener(this);

}

public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_go_settings:
//TODO Call second activity
Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);
break;
default:
break;
}
}

Дальше, не могу понять, как по нажатию btn-ok сохранить, то, что пользователь введёт в оба поля EditText. ???

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 19. Пишем простой калькулятор

Сообщение AndreyI » 07 ноя 2012, 13:56

String name = etName.getText().toString();
String number = etNumber.getText().toString();

В чем тут проблемы?

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 19. Пишем простой калькулятор

Сообщение $01ny$hko » 07 ноя 2012, 14:27

То есть дальше в public void onClick(View v) {
case R.id.btn_ok;

String name = etName.getText().toString();
String number = etNumber.getText().toString();
break;
default:
break;
}

?????
Проблема в том, что я не понимаю в каком методе и как правильно это прописать...

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 19. Пишем простой калькулятор

Сообщение AndreyI » 07 ноя 2012, 15:22

Все верно, только в данном случае String name и String number будут локальными переменными и будут действительны только в пределах блока (то что заключено в фигурные скобки {}), если хотите, чтобы они были видны и доступны для всех функций класса ProfilActivity то задекларируйте их соответственно.

Код: Выделить всё

public class ProfilActivity extends Activity implements OnClickListener{
String name;
String number;

Button btn_go_settings;
Button btn_ok;
EditText etName;
EditText etNumber;

...
в onClick соответственно будет
...

Код: Выделить всё

public void onClick(View v) { 

...

case R.id.btn_ok:
    name = etName.getText().toString();
    number = etNumber.getText().toString();
 break;

...

 }

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 19. Пишем простой калькулятор

Сообщение $01ny$hko » 07 ноя 2012, 17:18

Да вот так получается их сохранить, только при следующем переходе в ProfilActivity эти поля опять пусты (((

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 07 ноя 2012, 18:08

только при следующем переходе в ProfilActivity эти поля опять пусты
потому что вы ничего не делаете что бы они сохранялись =)
R.id.team
Политика на форуме запрещена

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 19. Пишем простой калькулятор

Сообщение $01ny$hko » 07 ноя 2012, 19:31

ха-ха! Так я ж о том и спрашиваю как это правильно реализовать?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 07 ноя 2012, 20:00

$01ny$hko писал(а):ха-ха! Так я ж о том и спрашиваю как это правильно реализовать?
в onPause() сохраняйте все данные в любой из локальных переменных, потом при старте активити в onResume() загружайте эти данные в ваши вьюшки
R.id.team
Политика на форуме запрещена

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 19. Пишем простой калькулятор

Сообщение $01ny$hko » 09 ноя 2012, 11:50

Подскажите,плиз,где посмотреть информацию про onPause() и onResume()?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 09 ноя 2012, 13:03

$01ny$hko писал(а):Подскажите,плиз,где посмотреть информацию про onPause() и onResume()?
http://developer.android.com/intl/ru/re ... sLifecycle
R.id.team
Политика на форуме запрещена

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 19. Пишем простой калькулятор

Сообщение $01ny$hko » 09 ноя 2012, 14:45

Not found (((

Natalia
Сообщения: 15
Зарегистрирован: 03 ноя 2012, 17:09

Re: Урок 19. Пишем простой калькулятор

Сообщение Natalia » 09 ноя 2012, 20:37

А как мне реализовать здесь button comma?
package com.windows.seven.calculator;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.text.method.DigitsKeyListener;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
EditText calcDialogDisplay;
TextView allClear;
TextView seven;
TextView eight;
TextView nine;
TextView division;
TextView four;
TextView five;
TextView six;
TextView multiply;
TextView one;
TextView two;
TextView three;
TextView subtract;
TextView zero;
TextView equals;
TextView addition;
TextView com;

//Результат который заносится в масив для обработки
ArrayList<Float> result = new ArrayList<Float>();

//Первое введенное число
float num1;
//Второе введенное число
float num2;

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 = 5;

final static int CLEAR = 1;
final static int DONT_CLEAR = 0;
int clearCalcDisplay = 0;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//находим элементы
calcDialogDisplay = (EditText) findViewById(R.id.editText1);
allClear = (TextView) findViewById(R.id.button22);
seven = (TextView) findViewById(R.id.button11);
eight = (TextView) findViewById(R.id.button12);
nine = (TextView) findViewById(R.id.button13);
division =(TextView) findViewById(R.id.button9);
four = (TextView) findViewById(R.id.button6);
five = (TextView) findViewById(R.id.button7);
six =(TextView) findViewById(R.id.button8);
multiply = (TextView) findViewById(R.id.button10);
one = (TextView) findViewById(R.id.button1);
two = (TextView) findViewById(R.id.button2);
three = (TextView) findViewById(R.id.button3);
subtract = (TextView) findViewById(R.id.button5);
zero = (TextView) findViewById(R.id.button20);
equals = (TextView) findViewById(R.id.button14);
addition = (TextView) findViewById(R.id.button4);
com = (TextView) findViewById(R.id.button15);
calcDialogDisplay.setKeyListener(DigitsKeyListener.getInstance(true,true));
registerListeners();

}

//Обработка нажатия на экран
public void registerListeners () {


zero.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("0");
}
});

one.setOnClickListener(new View.OnClickListener() {


@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("1");
}
});
two.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("2");
}
});
three.setOnClickListener(new View.OnClickListener() {


@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("3");
}
});
four.setOnClickListener(new View.OnClickListener() {


@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("4");
}
});
five.setOnClickListener(new View.OnClickListener() {


@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("5");
}
});
six.setOnClickListener(new View.OnClickListener() {


@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("6");
}
});
seven.setOnClickListener(new View.OnClickListener() {


@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("7");
}
});
eight.setOnClickListener(new View.OnClickListener() {


@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("8");
}
});
nine.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
calcDialogDisplay.setText("");
}
clearCalcDisplay = DONT_CLEAR;
calcDialogDisplay.append("9");
}
});
addition.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(ADD);
}
});
subtract.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(SUBTRACT);
}
});
multiply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(MULTIPLY);
}
});
division.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(DIVISION);
}
});
equals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(EQUALS);
}
});
allClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcDialogDisplay.setText("");
num1 = 0;
num2 = 0;
result.removeAll(result);
currentOperation = 0;
nextOperation = 0;
}
});
}
//функция расчета введенных значений
private void calcLogic(int operator) {

result.add(Float.parseFloat(calcDialogDisplay.getText().toString()));

if (operator !=EQUALS) {
nextOperation = operator;
} else if (operator == EQUALS) {
nextOperation = 0;
}
switch (currentOperation) {

//Прибавление
case ADD:
num1 = result.get(0);
num2 = result.get(1);

result.removeAll(result);

result.add(num1 + num2);

calcDialogDisplay.setText(String.format("%.0f", result.get(0)));
break;
case SUBTRACT:
num1 = result.get(0);
num2 = result.get(1);

result.removeAll(result);

result.add(num1 - num2);

calcDialogDisplay.setText(String.format("%.0f", result.get(0)));
break;
case MULTIPLY:
num1 = result.get(0);
num2 = result.get(1);

result.removeAll(result);

result.add(num1 * num2);

calcDialogDisplay.setText(String.format("%.0f", result.get(0)));
break;
case DIVISION:
if (num2==0){
Toast.makeText(this, "Деление на ноль запрещено", 1000).show();
calcDialogDisplay.setText("");
return;
}
num1 = result.get(0);
num2 = result.get(1);

result.removeAll(result);

result.add(num1 / num2);

calcDialogDisplay.setText(String.format("%.0f", result.get(0)));
break;
}

clearCalcDisplay = CLEAR;
currentOperation = nextOperation;
if (operator == EQUALS) {
num1 = 0;
num2 = 0;
result.removeAll(result);
}

}

}

Natalia
Сообщения: 15
Зарегистрирован: 03 ноя 2012, 17:09

Re: Урок 19. Пишем простой калькулятор

Сообщение Natalia » 11 ноя 2012, 17:51

Может подскажете как реализовать запятую в виде кнопочки в калькуляторе?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 11 ноя 2012, 18:08

что вы имеете в виду реализовать? ставите кнопку, по нажатию в поле ввода у вас добавляется точка/запятая))) в чём трудность? в её обработке?
R.id.team
Политика на форуме запрещена

Natalia
Сообщения: 15
Зарегистрирован: 03 ноя 2012, 17:09

Re: Урок 19. Пишем простой калькулятор

Сообщение Natalia » 12 ноя 2012, 18:43

rezak90 писал(а):что вы имеете в виду реализовать? ставите кнопку, по нажатию в поле ввода у вас добавляется точка/запятая))) в чём трудность? в её обработке?
да в обработке, а можно с пример кода для кнопки с запятой?

Ответить