2012-11-11 2 views
1

전화 걸기 기능을 제공하는 응용 프로그램을 만들고 있습니다. 나는 키패드를 만들었고 그 뒤에 키패드의 기능을 제공했다. 그것은 telephonyManager 등을 사용하여 전화를 전화, 수신 전화를 감지해야하지만이 코드를 실행하면 다음과 같은 오류가 있습니다 :친절하게 오류를 도와주세요. com.maju.yourApp가 예기치 않게 중단되었습니다.

죄송합니다, com.maju.yourApp이 unexpectidly

내가 오류를 필요는 없습니다 중지를 코드에서 나는 이유에 대해 전혀 모른다. 누군가 문제의 원인을 파악해 주시겠습니까? 다음과 같이 내가 노력하고 코드는 다음과 같습니다

공용 클래스 MainActivity가 활동을 확장 {

EditText ed =(EditText) findViewById(R.id.editText1); 
String number; 
Intent intent; 

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

    PhoneCallListener listenerObj = new PhoneCallListener(); 
    TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 
    tm.listen(listenerObj,PhoneStateListener.LISTEN_CALL_STATE); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
} 


public void one_btn(View v) 
{ 
    number = number+"1"; 
    ed.setText(number); 
} 

public void two_btn(View v) 
{ 
    number = number+"2"; 
    ed.setText(number); 
} 

public void three_btn(View v) 
{ 
    number = number+"3"; 
    ed.setText(number); 
} 

public void four_btn(View v) 
{ 
    number = number+"4"; 
    ed.setText(number); 
} 

public void five_btn(View v) 
{ 
    number = number+"5"; 
    ed.setText(number); 
} 

public void six_btn(View v) 
{ 
    number = number+"6"; 
    ed.setText(number); 
} 

public void seven_btn(View v) 
{ 
    number = number+"7"; 
    ed.setText(number); 
} 

public void eight_btn(View v) 
{ 
    number = number+"8"; 
    ed.setText(number); 
} 

public void nine_btn(View v) 
{ 
    number = number+"9"; 
    ed.setText(number); 
} 

public void esterisk_btn(View v) 
{ 
    number = number+"*"; 
    ed.setText(number); 
} 

public void zero_btn(View v) 
{ 
    number = number+"0"; 
    ed.setText(number); 
} 

public void hash_btn(View v) 
{ 
    number = number+"#"; 
    ed.setText(number); 
} 

public void call_btn(View v) 
{ 
    intent = new Intent(Intent.ACTION_CALL); 
    intent.setData(Uri.parse("tel:" + number)); 
    startActivity(intent); 
} 

public void back_btn(View v) 
{ 
    if(number.length() > 0) 
    { 
     String temp = ""; 

     for(int i=0; i<number.length() - 1; i++) 
     { 
      temp += number.charAt(i); 
     } 

     number = temp; 
    } 
} 

private class PhoneCallListener extends PhoneStateListener 
{ 
    long start; 
    long end; 
    Context context = getApplicationContext(); 
    Toast toast; 
    boolean flag = false; 

    public void onCallStateChanged(int state, String incomingNumber) 
    { 
     if(TelephonyManager.CALL_STATE_OFFHOOK == state) 
     { 
      start = System.currentTimeMillis(); 
      Log.i("Log" , "Phone State Calling"); 
      toast = Toast.makeText(context, "Phone State Calling" , Toast.LENGTH_LONG); 
      toast.show(); 
      flag = true; 
     } 

     else if(TelephonyManager.CALL_STATE_IDLE == state) 
     { 
      Log.i("Log" , "Phone State Idle"); 
      toast = Toast.makeText(context, "Phon State Idle", Toast.LENGTH_LONG); 
      toast.show(); 

      if(flag) 
      { 
       end = System.currentTimeMillis(); 
       long duration = (end - start)/1000; 
       Log.i("Log" , "Call Ended, Duration: "+ duration); 

       toast = Toast.makeText(context, "Call Ended\n Duration: "+ duration, Toast.LENGTH_LONG); 
       toast.show(); 

       flag = false; 
      } 
     } 

     else if(TelephonyManager.CALL_STATE_RINGING == state) 
     { 
      Log.i("Log", "Incoming Call From " + incomingNumber); 
      toast = Toast.makeText(context, "Incoming Call: "+ incomingNumber, Toast.LENGTH_LONG); 
      toast.show(); 
     } 


    } 

} 

}

답변

1

귀하의 문제는 여기에 있습니다 :

EditText ed =(EditText) findViewById(R.id.editText1); 

당신은 당신이 끝날 때까지 findViewById를 사용할 수 없습니다 setContentView를 사용하십시오.

setContentView() 이후에이 선을 onCreate로 이동하십시오.

미래에는 "코드에 오류가 없습니다"라고 생각하지 마십시오. 실제로 컴파일러가 오류를 표시하지 않지만 적어도 하나의 오류가 있음을 의미합니다. 컴파일러 오류가 발생해도 오류가 발생하는 경우 작업을 수행하는 첫 단계에 불과하기 때문에 중요합니다. 충돌에 대해 물어볼 때 logcat 스택 추적을 습관으로 게시하십시오. 나는 당신의 "널 포인터 예외"를 보여줍니다.

+0

감사합니다. 이제 작동합니다. –

+0

차가움. 재미있어! – Simon

관련 문제