안드로이드 스튜디오 너무 불친절하다...
모바일프로그래밍 실습수업에서 다룬 계산기 실습!
edittext값을 받아오고 원하는 버튼 연산자버튼을 누르면 textview로 계산 결과가 뜬다..!
어렵지 않은 실습이었는데 역대급 고생을 했다.
앱이 빌드는 됐는데 버튼만 누르면 갑자기 강제종료가 되고
뭘 만지다가 보면 렌더링 오류가 나서 아무것도 할 수 없었다.
새로 만들기만 몇 번 반복했는데 결국 해냈다.
public void onButtonClick(View view){
EditText input1 = findViewById(R.id.input1);
EditText input2 = findViewById(R.id.input2);
TextView Result = findViewById(R.id.labelResult);
int x, y, result;
x = Integer.parseInt(input1.getText().toString());
y = Integer.parseInt(input2.getText().toString());
switch(view.getId()){
case R.id.buttonAdd:
result = x + y;
Result.setText(Integer.toString(result));
break;
case R.id.buttonSubtract:
result = x - y;
//Result.setText(String.format("%s", Integer.toString(result)));
//-> rebundunt ~
Result.setText(String.format("%s", result));
break;
case R.id.buttonMultiply:
result = x * y;
Result.setText(result);
break;
case R.id.buttonDivide:
result = x / y;
Result.setText(result);
break;
}
// if(view.getId() == R.id.buttonAdd){
// result = x + y;
// Result.setText(String.format("%s", result));
// }
// else if(view.getId() == R.id.buttonSubtract){
// result = x - y;
// Result.setText(String.format("%s", result));
// }
// else if(view.getId() == R.id.buttonMultiply){
// result = x * y;
// Result.setText(String.format("%s", result));
// }
// else if(view.getId() == R.id.buttonDivide){
// result = x / y;
// Result.setText(String.format("%s", result));
// }
}
java 코드를 이야기하기 전에
xml 파일이 디자인으로 보이지 않고 Rendering error라고 뜨는 경우,
xml 코드에 오류가 있을 수 있다.
api 버전정보가 맞자 않는 경우도 있다고 한다. 하지만 나는 최신 버전을 쓰고 있었기 때문에 이 문제는 아니었다.
결국 코드에 문제가 있었던 것인데, 안드로이드 스튜디오는 정말 필수적인 오류를 알려주지 않는다.
불필요한 주의만 많이 뜨고...
주의표시 뜨는 것들을 다 수정해서 오류가 없는 줄 알았는데 렌더링이 안되어서 정말 멘붕이었다.
근데 결국 그냥 코드에 오류가 있었던 것..!
그리고 앱이 강제 종료가 되었던 가장 큰 이유는
textview.setText() 때문이었는데
setText에 처음에는 단순히 int타입의 result변수만 넣었었다.
이렇게 하니까 강제 종료가 되었다.
혹시나 하고 문자열로 바꾸니까 해결이 되었다...
왜!!! 안알려줘!! 필요없는 주의나 주고!!!!!! 필요가 없진 않겠지...
위에 코드에서 buttonMuliply, buttonDivide 부분에 setText에는 result만 넣어뒀기 때문에
앱을 실행해서 * 또는 / 버튼을 누르면 앱이 종료된다.
buttonAdd의 setText에는 Integer.toSting(result)를 넣으니 문제없이 실행이 되었다.
하지만!
Number formatting does not take into account locale settings. Consider using `String.format` instead.
이런 주의 표시가 떠서 Stirng.format을 넣어봤다.
String.format("%s", result);
위의 코드를 setText에 넣어주니까 주의 표시가 사라졌다.
문제해결!!
그리고 switch case문!
수업 때 switch case를 써서 그렇게 해봤는데 주의 표시가 나왔다.
Resource IDs will be non-final by default in Android Gradle Plugin version 8.0, avoid using them in switch case statements
갑자기 switch case를 쓰지말라는거다... 또 다시 멘붕에 빠졌다.
또 한참을 헤메다가 id를 사용해서 switch case문 대신 if문을 사용하는데 성공했다!!
그래서 위에 코드는 if문에 주석처리가 되어있지만
switch case대신 주석 처리한 부분을 사용하면 주의 문구 하나없는 코드가 완성된다 :)
'Programming' 카테고리의 다른 글
20220425 코딩테스트&AI 공부일기 (0) | 2022.04.26 |
---|---|
conda install error : Retrying with flexible solve. (0) | 2022.03.18 |
remote: Internal Server Error (0) | 2022.03.18 |
객체지향프로그래밍 OOP(object oriented programming) - 1 (0) | 2022.01.21 |
깃허브 Readme 꾸미기에 사용한 링크 (0) | 2021.12.15 |