2013-01-05 79 views
0

我遇到空指針異常,只要我點擊我的對話框中的「確定」按鈕。空指針異常 - 提醒對話框中的表單Android

public class TestActivity extends ListActivity { 

    private Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     context = this; 
     setContentView(R.layout.activity_bucket_crud); 

    } 

    public void addTestItem(View view) { 
     LayoutInflater inflater = getLayoutInflater(); 
     new AlertDialog.Builder(this) 
      .setTitle("Add Item") 
      .setIcon(R.drawable.add) 
      .setView(inflater.inflate(R.layout.activity_bucket_crudadd, null)) 
      .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        EditText text = (EditText)findViewById(R.id.editTextAdd); 
        DatabaseHandler myDbHelper = new DatabaseHandler(context); 
        myDbHelper.insertItem(text.getText().toString()); 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        dialog.cancel(); 
       } 
      }).show(); 
    } 

} 

這裏是

01-05 09:20:35.052: E/AndroidRuntime(761): FATAL EXCEPTION: main 
01-05 09:20:35.052: E/AndroidRuntime(761): java.lang.NullPointerException 
01-05 09:20:35.052: E/AndroidRuntime(761): at com.example.test.TestActivity$1.onClick(TestActivity.java:65) 
01-05 09:20:35.052: E/AndroidRuntime(761): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 

我的佈局,它這個

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="150dp"> 

    <EditText 
     android:id="@+id/editTextAdd" 
     android:layout_width="wrap_content" 
     android:layout_height="100dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:ems="10" 
     android:inputType="textMultiLine" 
     android:layout_margin="5dp" 
     android:padding="3dp"> 

     <requestFocus /> 
    </EditText> 

</RelativeLayout> 

似乎當我進入的EditText中的文本一樣,沒有被讀取的值錯誤..

EditText text = (EditText)findViewById(R.id.editTextAdd); 

是t他的原因空指針因爲該行指向(text.getText().toString()?如果是這樣,我如何獲得文本的值?

謝謝

回答

3

因爲EditText textNULL。您不是指Dialog LayoutEditText text

只是改變你的線類似,並讓我知道發生什麼事..

EditText text = (EditText) dialog.findViewById(R.id.editTextAdd); 

要想從對話框佈局EditText引用您必須使用與findViewById()方法dialog參考。

更新:

LayoutInflater inflater = getLayoutInflater(); 
View view = null; 
view = inflater.inflate(R.layout.activity_bucket_crudadd, null); 
     new AlertDialog.Builder(this) 
      .setTitle("Add Item") 
      .setIcon(R.drawable.add) 
      .setView(view) 

現在訪問諸如編輯文本,

EditText text = (EditText) view.findViewById(R.id.editTextAdd); 
+0

對話框中沒有findViewById方法? – newbie

+0

其實,你的實現是錯誤的..看看我更新的答案.. – user370305

+0

謝謝。我現在明白了:) – newbie

2

你不能內部對話監聽的OnClick()方法創建的EditText實例。將EditText實例創建爲全局對象,並在將其插入數據庫時​​使用該引用。 findViewById()方法僅用於Child Activities內部,並且當您嘗試在其他類/接口中使用時,上下文將被更改。

,否則你可以試試下面的代碼:

EditText text = (EditText)TestActivity.this.findViewById(R.id.editTextAdd); 
+0

這不工作.. – newbie

+0

@newbie你試過聲明的EditText爲全局變量?仍然不起作用 – TNR