2012-03-02 75 views
1

我想創建一個Android程序,它將讀取文本,然後將其打印出來,然後習慣使用Android的I/O。但是,每當我在AVD上運行它時,它會在LogCat中返回一個錯誤,說我的代碼中有一個NullPointerException,因此它「無法實例化活動ComponentInfo」。Android活動 - NullPointerException(「無法實例化活動ComponentInfo」)?

我找不到我指的是什麼空。

這裏是我的代碼:

import android.app.*; 
import android.os.*; 
import android.view.View; 
import android.view.View.*; 
import android.widget.*; 



public class ButtonTestActivity extends Activity { 

TextView tv = (TextView) findViewById(R.id.textView1); 
EditText et = (EditText) findViewById(R.id.edittext); 

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


    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button b = (Button) findViewById(R.id.Enter); 

    b.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      tv.setText(et.getText().toString()); 
     } 
    }); 

} 

}

這裏是我的XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<TextView 
    android:id="@+id/textView1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 

<Button 
    android:id="@+id/Enter" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 

<EditText 
    android:id="@+id/edittext" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

</LinearLayout> 

有誰知道什麼可能會造成這個?非常感謝。

+0

我看不出有什麼明顯的錯誤。你可以粘貼來自LogCat – Sid 2012-03-02 16:55:11

+0

的異常跟蹤帖子錯誤stacktrace – kosa 2012-03-02 16:55:30

回答

16

您需要在onCreate和setContentView之後實例化您的視圖,除非您通過setContentView方法設置Activities佈局,否則Activity不知道您要引用哪些視圖。如果這不能解決問題,那麼如果您從LogCat中發佈堆棧跟蹤,那麼確切的行號是已知的,這將有所幫助。

@Override 

public void onCreate(Bundle savedInstanceState) { 


super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 


TextView tv = (TextView) findViewById(R.id.textView1); 
EditText et = (EditText) findViewById(R.id.edittext); 

Button b = (Button) findViewById(R.id.Enter); 

b.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     tv.setText(et.getText().toString()); 
    } 
}); 

} 
+0

電視和et不必是局部變量。 – Robert 2012-03-02 16:58:37

+0

這很可能會解決您的問題。當我開始爲Android開發時,我遇到了類似的問題。試試這個,它會工作。 – 2012-03-02 16:59:16

+0

啊,我最初有TextView和EditText,你有它們,但是那會導致錯誤,因爲它們不是最終的。現在我已經做出了最終決定並放回原位,這是有效的。謝謝! – Zeldarulah 2012-03-05 16:52:43

0

我認爲這個問題是由兩個字段tvet創建類的實例時直接初始化引起的。

您應該像使用「按鈕b」一樣移動onCreate方法中的兩個字段的初始化。

0

設置內容之前,你試圖實例TextView的和EditText上,這就是爲什麼你得到了空指針異常
感謝

0

空指針異常意味着你要引用尚未創建的東西。
setContentView根據變量tvet創建必要字段。
所以,你需要tvet之後setContentView

0

是的,額外的上述回答,我給這個錯誤,因爲onCreate方法之前先定義一個變量:

boolean in = true; 

@Override 
protected void onCreate ....... 
相關問題