안녕하세요 안드로이드 처음으로 해보는 초보자입니다.
사실 자바도 그리 잘하는 편이 못되서 걱정이 산더미인데 일단 부딪혀보고 있습니다. 숙련자 분들께서 좀 답답하시더라도 초보자라 그러려니 하면서 우문에 친절한 답변을 기대하며 이렇게 글을 올립니다.

질문은 약 네가지입니다.

첫번째 질문은 android xml 언어 관련하여 초보자로서 차근차근 공부를 좀 해볼 수 있는 사이트를 아시는 곳이 있다면 상세히좀 알려주시면 감사하겠습니다. 이미 '알짜만 골라 배우는 안드로이드 프로그래밍'이란 책을 사서 해보고는 있으나 부족한게 꽤 많은 듯하여 다른 공부할 수 있을만한 자료들이 절실합니다. 책의 예제 외에 다양한 상황의 예제들을 보면서 공부할 수 있을만한곳 있을까요? 설명이 덧붙여 있다면 금상첨화겠지요.

두번째 질문 부터는 이번에 제가 도전해본 계산기를 만들면서 생긴 문제에 관한 것 입니다. 일단 자바 쪽 코드는 다음과 같습니다.(main.xml은 따로 첨부하겠습니다.) 질문을 미리 써놓겠습니다. 자바 코드가 쓸데없이 좀 길어서요;; 길지만 코딩자체의 논리는 엄~~~~~~~~~~~청 간단한 거라 한번만 보셔도 아실수 있을꺼에요...(아 부끄럽네요 초보자 코딩이라 -_-;;)

일단 코딩이 긴 이유중 하나가 Button Class의 Object 생성때문인데요 버튼 하나하나마다 이렇게 일일이 객체를 따로 지정하는 수밖에 없는걸까요?

그리고 세번째 질문 코드를 보시다 보면
btn0 = (Button) findViewById(R.id.num0);
  btn0.setOnClickListener(this);
위에 저 부분에서 각각의 버튼 객체에 숫자 버튼의 id를 지정하고 리스너를 설정 해주고 있는데요 이 부분도 계속 복사 붙여넣기로 길어졌는데 어레이를 만들어 for구문 돌려서 처리하듯이 한꺼번에 싹 해주는 깔끔한 방법이 없을까요? 사실 위에 생각이 안되는 이유가 findViewById안에 R.id.num<- 이 부분의 id 이름을 함수식 안에서 바꿔주는 방법을 생각하질 못하겠어서였습니다.
그리고 전체적으로 반복되는 코드들이 많은데 이를 좀 깔끔히 줄일수는 없을까요...?

네번째 질문으로 요 밑에 나올 코드 녀석이 다 되는거 같긴 하는데 calculate 부분이 안됩니다..ㅜㅜ 즉 화면에 버튼을 누르면 숫자나 operator들이 찍혀서 나오는데 다만 계산이 안되는 것이죠..오류가 뜨면서 강제로 종료한다는 식으로 에뮬레이터에서는 뜬답니다. 이유를 모르겠어요 디버깅에도 소질이..orz 좀 부탁드립니다..



package com.android.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;

public class testApp extends Activity implements View.OnClickListener {
 String operator = null;
 String memory1 = "";
 String memory2 = "";
 String history = "";
 
 int ans = 0;
 EditText fld;
 Button btn0;
 Button btn1;
 Button btn2;
 Button btn3;
 Button btn4;
 Button btn5;
 Button btn6;
 Button btn7;
 Button btn8;
 Button btn9;
 Button btncal;
 Button btnclr;
 Button btnconvert;
 Button btnp;
 Button btnm;
 Button btnmul;
 Button btnd;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);
  btn0 = (Button) findViewById(R.id.num0);
  btn0.setOnClickListener(this);
  btn1 = (Button) findViewById(R.id.num1);
  btn1.setOnClickListener(this);
  btn2 = (Button) findViewById(R.id.num2);
  btn2.setOnClickListener(this);
  btn3 = (Button) findViewById(R.id.num3);
  btn3.setOnClickListener(this);
  btn4 = (Button) findViewById(R.id.num4);
  btn4.setOnClickListener(this);
  btn5 = (Button) findViewById(R.id.num5);
  btn5.setOnClickListener(this);
  btn6 = (Button) findViewById(R.id.num6);
  btn6.setOnClickListener(this);
  btn7 = (Button) findViewById(R.id.num7);
  btn7.setOnClickListener(this);
  btn8 = (Button) findViewById(R.id.num8);
  btn8.setOnClickListener(this);
  btn9 = (Button) findViewById(R.id.num9);
  btn9.setOnClickListener(this);
  btncal = (Button) findViewById(R.id.calculate);
  btncal.setOnClickListener(this);
  btnclr = (Button) findViewById(R.id.Clr);
  btnclr.setOnClickListener(this);
  btnp = (Button) findViewById(R.id.plus);
  btnp.setOnClickListener(this);
  btnm = (Button) findViewById(R.id.minus);
  btnm.setOnClickListener(this);
  btnmul = (Button) findViewById(R.id.multiply);
  btnmul.setOnClickListener(this);
  btnd = (Button) findViewById(R.id.divide);
  btnd.setOnClickListener(this);

  welcome();
 }

 public void onClick(View view) {

  if (view.getId() == R.id.num0) {
   ifclick(0);
  }
  if (view.getId() == R.id.num1) {
   ifclick(1);
  }
  if (view.getId() == R.id.num2) {
   ifclick(2);
  }
  if (view.getId() == R.id.num3) {
   ifclick(3);
  }
  if (view.getId() == R.id.num4) {
   ifclick(4);
  }
  if (view.getId() == R.id.num5) {
   ifclick(5);
  }
  if (view.getId() == R.id.num6) {
   ifclick(6);
  }
  if (view.getId() == R.id.num7) {
   ifclick(7);
  }
  if (view.getId() == R.id.num8) {
   ifclick(8);
  }
  if (view.getId() == R.id.num9) {
   ifclick(9);
  }
  if (view.getId() == R.id.calculate) {
   if (operator == null) {
    ans = Integer.parseInt(memory1);
    memory1 = "";
   } else if (operator == "+") {
    ans = Integer.parseInt(memory1) + Integer.parseInt(memory2);
    history = history + "\n=" + getString(ans);
    memory1 = "";
    memory2 = "";
   } else if (operator == "-") {
    ans = Integer.parseInt(memory1) - Integer.parseInt(memory2);
    history = history + "\n=" + getString(ans);
    memory1 = "";
    memory2 = "";
   } else if (operator == "*") {
    ans = Integer.parseInt(memory1) * Integer.parseInt(memory2);
    history = history + "\n=" + getString(ans);
    memory1 = "";
    memory2 = "";
   } else if (operator == "/") {
    ans = Integer.parseInt(memory1) / Integer.parseInt(memory2);
    history = history + "\n=" + getString(ans);
    memory1 = "";
    memory2 = "";
   }
   fld.setText(history);

  }
  if (view.getId() == R.id.Clr) {
   history = "";
   fld.setText(history);

  }
  if (view.getId() == R.id.plus) {
   operator = "+";
   history += "+";
   fld.setText(history);

  }
  if (view.getId() == R.id.minus) {
   operator = "-";
   history += "-";
   fld.setText(history);

  }
  if (view.getId() == R.id.multiply) {
   operator = "*";
   history += "*";
   fld.setText(history);

  }
  if (view.getId() == R.id.divide) {
   operator = "/";
   history += "/";
   fld.setText(history);
  }
 }

 public void welcome() {
  fld = (EditText) findViewById(R.id.window);
  fld.setText("welcome~");
 }

 public void ifclick(int num) {
  if (operator == null) {
   memory1 = memory1 + num;
   history = history + num;
  } else {
   memory2 = memory2 + num;
   history = history + num;
  }
  fld = (EditText) findViewById(R.id.window);
  fld.setText(history);
 }

}