단순한 계산기를 만드는데 그정보를 스트링으로 저장해서 연산내용을 계속 기억할수 있도록 하려고 합니다.
자체에선 오류가 생기지 않는데 눌포인트 익셉션이 생겨요. 이걸 어떻게 해결해야할지 모르겠습니다. 혹시 몰라 xml파일도 첨부합니다.
이게 로그캣에서 가져온 것이고
03-03 14:57:31.399: WARN/dalvikvm(224): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
03-03 14:57:31.409: ERROR/AndroidRuntime(224): Uncaught handler: thread main exiting due to uncaught exception
03-03 14:57:31.468: ERROR/AndroidRuntime(224): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{hw1.hw1/hw1.hw1.hw1Activity}: java.lang.NullPointerException
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2402)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2497)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1848)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.os.Handler.dispatchMessage(Handler.java:99)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.os.Looper.loop(Looper.java:123)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.ActivityThread.main(ActivityThread.java:4338)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at java.lang.reflect.Method.invokeNative(Native Method)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at java.lang.reflect.Method.invoke(Method.java:521)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at dalvik.system.NativeStart.main(Native Method)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): Caused by: java.lang.NullPointerException
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.Activity.findViewById(Activity.java:1612)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at hw1.hw1.hw1Activity.<init>(hw1Activity.java:25)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at java.lang.Class.newInstanceImpl(Native Method)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at java.lang.Class.newInstance(Class.java:1479)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2394)
03-03 14:57:31.468: ERROR/AndroidRuntime(224): ... 11 more
이부분이 코드입니다.
package hw1.hw1;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
public class hw1Activity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
boolean flag=false;
int operation=0;
int first=0;
int second=0;
int answer=0;
String history="";
String number1="";
String number2="";
EditText fld=(EditText)findViewById(R.id.cal);
public void onClick(View v){
if (v.getId()==R.id.num1){
if(operation==0){
number1=number1+"1";
history=history+"1";
}
else if(operation!=0){
number2=number2+"1";
history=history+"1";
}
fld.setText(history);
}
else if (v.getId()==R.id.num2){
if(operation==0){
number1=number1+"2";
history=history+"2";
}
else if(operation!=0){
number2=number2+"2";
history=history+"2";
}
fld.setText(history);
}
else if (v.getId()==R.id.num3){
if(operation==0){
number1=number1+"3";
history=history+"3";
}
else if(operation!=0){
number2=number2+"3";
history=history+"3";
}
fld.setText(history);
}
else if (v.getId()==R.id.num4){
if(operation==0){
number1=number1+"4";
history=history+"4";
}
else if(operation!=0){
number2=number2+"4";
history=history+"4";
}
fld.setText(history);
}
else if (v.getId()==R.id.num5){
if(operation==0){
number1=number1+"5";
history=history+"5";
}
else if(operation!=0){
number2=number2+"5";
history=history+"5";
}
fld.setText(history);
}
else if (v.getId()==R.id.num6){
if(operation==0){
number1=number1+"6";
history=history+"6";
}
else if(operation!=0){
number2=number2+"6";
history=history+"6";
}
fld.setText(history);
}
else if (v.getId()==R.id.num7){
if(operation==0){
number1=number1+"7";
history=history+"7";
}
else if(operation!=0){
number2=number2+"7";
history=history+"7";
}
fld.setText(history);
}
else if (v.getId()==R.id.num8){
if(operation==0){
number1=number1+"8";
history=history+"8";
}
else if(operation!=0){
number2=number2+"8";
history=history+"8";
}
fld.setText(history);
}
else if (v.getId()==R.id.num9){
if(operation==0){
number1=number1+"9";
history=history+"9";
}
else if(operation!=0){
number2=number2+"9";
history=history+"9";
}
fld.setText(history);
}
else if (v.getId()==R.id.num0){
if(operation==0){
number1=number1+"0";
history=history+"0";
}
else if(operation!=0){
number2=number2+"0";
history=history+"0";
}
fld.setText(history);
}
else if (v.getId()==R.id.convert){
if(flag==false){
setContentView(R.layout.main2);
flag=true;
}
else if(flag==true){
setContentView(R.layout.main);
flag=false;
}
fld.setText(history);
}
else if (v.getId()==R.id.calculate){
if(operation==0){
answer=Integer.parseInt(number1);
number1="";
}
else if(operation==1){
answer=Integer.parseInt(number1)+Integer.parseInt(number2);
history=history+"\n="+getString(answer);
number1="";
number2="";
}
else if(operation==2){
answer=Integer.parseInt(number1)-Integer.parseInt(number2);
history=history+"\n="+getString(answer);
number1="";
number2="";
}
else if(operation==3){
answer=Integer.parseInt(number1)*Integer.parseInt(number2);
history=history+"\n="+getString(answer);
number1="";
number2="";
}
else if(operation==4){
answer=Integer.parseInt(number1)/Integer.parseInt(number2);
history=history+"\n="+getString(answer);
number1="";
number2="";
}
fld.setText(history);
}
else if (v.getId()==R.id.Clr){
history="";
fld.setText(history);
}
else if (v.getId()==R.id.plus){
operation=1;
history+="+";
fld.setText(history);
}
else if (v.getId()==R.id.minus){
operation=2;
history+="-";
fld.setText(history);
}
else if (v.getId()==R.id.mul){
operation=3;
history+="*";
fld.setText(history);
}
else if (v.getId()==R.id.div){
operation=4;
history+="/";
fld.setText(history);
}
}
}
ㄷㄷㄷ.... 숫자하나하나 다 지정한건가요?
if(operation==0){
number1=number1+"8";
history=history+"8";
}
else if(operation!=0){
number2=number2+"8";
history=history+"8";
}
fld.setText(history);
이 부분은 더해지는 숫자만 다르고 형식은 똑같으므로
이 기능을 하는 함수를 따로 만들고 호출할때 숫자값만 넘겨주면 줄이 확~ 줄어들껍니다^^
그리고 else if 조건이 if 조건을 뺀 나머지면 그냥 else만 써도 되고,
아마 java쪽에서는 String값에다 int값을 더할때는 "aaa"+1 같은경우 결과는
"aaa1"의 String값으로 나오는걸로 알고있습니다.
따로 숫자의 따음표 안붙여도 될껍니다...