2012-01-23 32 views
0

在这个机会我尝试做一个简单的活动,得到了EditText,一个按钮,并意图当我按下按钮来调用在EditText数量。无法实例活动

活动的开端,但抛出这样一个异常...

01-23 14:41:13.760: E/AndroidRuntime(305): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{android.testcall/android.testcall.TestCallActivity}: java.lang.NullPointerException 

告诉我,如果你需要更多的信息,或代码查看...

代码类:

public class TestCallActivity extends Activity { 
private TelephonyManager _CurrTelephonyManager; 
    private PhoneStateListener phoneListener; 
    final TextView textview = (TextView) findViewById(R.id.TvResulState); 
    final EditText phoneNumber = (EditText)findViewById(R.id.EtPhoneNumber); 
    private Date lastIdleTime; 
    private String currentPhoneState = "CALL_STATE_IDLE"; 

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

     phoneListener = new PhoneStateListener() 
     { 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) 
      { 
       switch (state) 
       { 
        case TelephonyManager.CALL_STATE_IDLE: 
         lastIdleTime = new Date(); 
         currentPhoneState = "CALL_STATE_IDLE"; 
        break; 
        case TelephonyManager.CALL_STATE_OFFHOOK: 
         currentPhoneState = "CALL_STATE_OFFHOOK";  
        break; 
        case TelephonyManager.CALL_STATE_RINGING: 
         currentPhoneState = "CALL_STATE_RINGING"; 
        break; 
       } 
       textview.setText("Phone State: " + currentPhoneState); 
      } 
     };  
     _CurrTelephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 


    } catch (Exception error) { 
     // TODO: handle exception 
     error.printStackTrace(); 
    } 

    final Button btCall = (Button) findViewById(R.id.BtCallNumber); 
     btCall.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(Intent.ACTION_CALL); 
       String uri = "tel:" + phoneNumber.toString().trim() ; 
       intent.setData(Uri.parse(uri)); 
       startActivity(intent); 
      } 
    }); 
} 

完整的错误堆栈:

01-23 15:25:17.234: E/AndroidRuntime(309): FATAL EXCEPTION: main 
01-23 15:25:17.234: E/AndroidRuntime(309): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{android.testcall/android.testcall.TestCallActivity}: java.lang.NullPointerException 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.os.Looper.loop(Looper.java:123) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-23 15:25:17.234: E/AndroidRuntime(309): at java.lang.reflect.Method.invokeNative(Native Method) 
01-23 15:25:17.234: E/AndroidRuntime(309): at java.lang.reflect.Method.invoke(Method.java:521) 
01-23 15:25:17.234: E/AndroidRuntime(309): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-23 15:25:17.234: E/AndroidRuntime(309): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-23 15:25:17.234: E/AndroidRuntime(309): at dalvik.system.NativeStart.main(Native Method) 
01-23 15:25:17.234: E/AndroidRuntime(309): Caused by: java.lang.NullPointerException 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.Activity.findViewById(Activity.java:1637) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.testcall.TestCallActivity.<init>(TestCallActivity.java:21) 
01-23 15:25:17.234: E/AndroidRuntime(309): at java.lang.Class.newInstanceImpl(Native Method) 
01-23 15:25:17.234: E/AndroidRuntime(309): at java.lang.Class.newInstance(Class.java:1429) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
01-23 15:25:17.234: E/AndroidRuntime(309): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
+1

需要代码... – VicVu

+0

当您尝试使用变量而不首先初始化它时,会发生NullPointerException。我们需要从Logcat中获得更多信息,它会显示哪个类抛出它,以及抛出它的代码。 – Guillaume

+0

显示整个堆栈跟踪。我们需要查看最内层的异常,这将显示您的代码中空指针的位置。 –

回答

0

移动这些:

final TextView textview = (TextView) findViewById(R.id.TvResulState); 
final EditText phoneNumber = (EditText)findViewById(R.id.EtPhoneNumber); 

而且,除去try ... catch。它不好。

+0

感谢Mappet纪尧姆 – AuTi

1

你调用findViewById的方式,它的setContentView之前发生。将这些调用到onCreate方法调用的setContentView后,和setContentView后您的文本视图不会在你的onCreate方法无效

0

您正在尝试启动的观点,你夸大了XML前:

final TextView textview = (TextView) findViewById(R.id.TvResulState); 
final EditText phoneNumber = (EditText)findViewById(R.id.EtPhoneNumber); 

尝试启动他们在您的onCreate()setContentView()

... 
    setContentView(R.layout.testcallactivity); 
    textview = (TextView) findViewById(R.id.TvResulState); 
    phoneNumber = (EditText)findViewById(R.id.EtPhoneNumber); 

    ... 
+0

感谢给予好评:P – Rotemmiz

0

您还需要初始化_CurrTelephonyManager变量后按如下

_CurrTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 

在行之前

_CurrTelephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
相关问题