2012-11-11 42 views
1

我正在提供一個撥號器的設施的應用程序。我創建了一個鍵盤,並在其後面提供了一個鍵盤的功能。應該檢測來電,使用telephonyManager等撥打呼叫但是當我運行的代碼它提供了以下錯誤:請幫助我的錯誤com.maju.yourApp已經停止undepectidly

對不起,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。

將此行移至onCreate,setContentView()後。

在未來,不要以爲「我在代碼中沒有任何錯誤」。你實際上的意思是編譯器不會顯示任何錯誤,但是你確實有(至少)一個錯誤。這是一個重要的觀點,因爲如果你有任何錯誤,沒有編譯錯誤只是解決問題的第一步。在詢問崩潰情況時,也請將logcat堆棧跟蹤作爲習慣問題發佈。我敢打賭你們顯示出一個「空指針異常」。

+0

謝謝。它現在有效。 –

+0

很酷。玩的開心! – Simon

相關問題