마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

OnToucuEvent 시 NullPointException 오류 문의 입니다.

0 추천
 public boolean onTouchEvent(MotionEvent event) {
  int selectslot=0;

  if (event.getAction() == MotionEvent.ACTION_DOWN) {
   dx = (int) event.getX();
   dy = (int) event.getY();
 
  } else if (event.getAction() == MotionEvent.ACTION_UP) {

   mx = (int) event.getX();
   my = (int) event.getY();
   x = mx - dx;
   y = my - dy;

   if(x<=20&&x>=-20){
         //아래 코드에서 stateView.selectSlot 에서 오류가 납니다.
    selectslot = stateView.selectSlot(mx, my);
  // 다음 코드는 생략하고요 

         // 선택된 카드를 확인 하는 코드입니다.(StateView class 안에 있는 코드입니다.)
         public int selectSlot(int x, int y) {
  int selected_x = x;
  int selected_y = y;
  int selectedCardNum = 0;
         // 카드가 총 13장이고요
  for (int i = 0; i <= 12; i++) {

   try {

          // 여기서 NullPointException 이 발생하는데 이것이 같은 위치를 클릭해도
          // 발생할때도 있고 안할 때도 있고 
          // 그러니까 제가 코딩한대로 제대로 동작하는 경우도 있고 오류나는 경우도 있네요.
          
    if (mSlot[i].isSelected(selected_x, selected_y)) {
     selectedCardNum = i;

     xx = mSlot[i].mSlotWidth;
     yy = mSlot[i].mSlotHeight;

     break;
    } else {
     selectedCardNum = 88;
    }


   } catch (Exception e) {
    selectedCardNum = 88;

   }
  }

  return selectedCardNum;
 }

 // 아래는 StateView 의 일부 코드 입니다.
public class StateView extends SurfaceView implements SurfaceHolder.Callback {
        //여기서 mSlot 를 배열로 선언하고요
 public Slot[] mSlot;

 @Override
 public void onDraw(Canvas canvas) {
         // for 문으로 mSlot  class 에 위치를 저장합니다.
  for (int j = index1; j <= index2; j++) {
    mSlot[j] = new Slot(j,
      mScreenConfig.nameStartX + mScreenConfig.slotStartX + j
        * mScreenConfig.slotSize,
      mScreenConfig.nameSizeY + mScreenConfig.nameStartY
        + mScreenConfig.slotGapY, mScreenConfig.slotX,
      mScreenConfig.slotY);
                }
 // 글자수 제한 때문에 코드를 다 넣지 못하네요 ㅠㅠ
        // 이것으로라도 오류를 찾을 수 있을지 모르지만 고수님들의 조언을 구합니다.
        // JAVA로 처음 하는 작업이라.. 있는 코드 응용해서 제가 손을 봐서 그런지.
        // 뜻대로 안되네요..
    

 

갈때까지가는거야 (180 포인트) 님이 2015년 2월 26일 질문

1개의 답변

+1 추천

try ~ catch 에서 NullPointerException 이 날 부분은 한군데 밖에 없는데요

 

mSlot[i].   <- 여기에서죠

어떤게 Null 인지 알수가 없으니 로그를 찍으면서 해보세요, 예를 들면

try {
    if (mSlot == null) {
        Log.e("TAG", "mSlot is null");
    } else {
        if (mSlot[i] == null) {
            Log.e("TAG", "slot " + String.valueOf(i) + " is null");
        } else {
            // ..
        }
    }
} catch (Exception e) {

}

 

mamondebaltob (32,750 포인트) 님이 2015년 2월 26일 답변
...